Commit df44db71 authored by Romain Courteaud's avatar Romain Courteaud

Allow to configure the email message sent.

parent b006b7b8
...@@ -101,10 +101,11 @@ if (ticket is None) and int(person.Entity_statBalance()) > 0:\n ...@@ -101,10 +101,11 @@ if (ticket is None) and int(person.Entity_statBalance()) > 0:\n
\n \n
ticket.reindexObject(activate_kw={\'tag\': tag})\n ticket.reindexObject(activate_kw={\'tag\': tag})\n
\n \n
mail_message = ticket.RegularisationRequest_checkToSendUniqEvent(\n notification_message = context.getPortalObject().portal_notifications.getDocumentValue(\n
portal.portal_preferences.getPreferredRegularisationRequestResource(),\n reference="slapos-crm.create.regularisation.request")\n
\'Invoice payment requested\',\n if notification_message is None:\n
"""Dear user,\n subject = \'Invoice payment requested\'\n
body = """Dear user,\n
\n \n
A new invoice has been generated. \n A new invoice has been generated. \n
You can access it in your invoice section at %s.\n You can access it in your invoice section at %s.\n
...@@ -113,7 +114,16 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca ...@@ -113,7 +114,16 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca
\n \n
Regards,\n Regards,\n
The slapos team\n The slapos team\n
""" % portal.portal_preferences.getPreferredSlaposWebSiteUrl(),\n """ % portal.portal_preferences.getPreferredSlaposWebSiteUrl()\n
\n
else:\n
subject = notification_message.getTitle()\n
body = notification_message.convert(format=\'text\')[1]\n
\n
mail_message = ticket.RegularisationRequest_checkToSendUniqEvent(\n
portal.portal_preferences.getPreferredRegularisationRequestResource(),\n
subject,\n
body,\n
\'Requested manual payment.\')\n \'Requested manual payment.\')\n
\n \n
return ticket, mail_message\n return ticket, mail_message\n
......
...@@ -54,12 +54,10 @@ ...@@ -54,12 +54,10 @@
if REQUEST is not None:\n if REQUEST is not None:\n
raise Unauthorized\n raise Unauthorized\n
\n \n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n notification_message = context.getPortalObject().portal_notifications.getDocumentValue(reference="slapos-crm.acknowledgment.escalation")\n
38,\n if notification_message is None:\n
\'service_module/slapos_crm_acknowledgement\',\n subject = \'Reminder: invoice payment requested\'\n
\'service_module/slapos_crm_stop_reminder\',\n body = """Dear user,\n
\'Reminder: invoice payment requested\',\n
"""Dear user,\n
\n \n
We would like to remind you the unpaid invoice you have on %s.\n We would like to remind you the unpaid invoice you have on %s.\n
If no payment is done during the coming days, we will stop all your current instances to free some hardware resources.\n If no payment is done during the coming days, we will stop all your current instances to free some hardware resources.\n
...@@ -68,7 +66,18 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca ...@@ -68,7 +66,18 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca
\n \n
Regards,\n Regards,\n
The slapos team\n The slapos team\n
""" % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl(),\n """ % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl()\n
\n
else:\n
subject = notification_message.getTitle()\n
body = notification_message.convert(format=\'text\')[1]\n
\n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n
38,\n
\'service_module/slapos_crm_acknowledgement\',\n
\'service_module/slapos_crm_stop_reminder\',\n
subject,\n
body,\n
\'Stopping reminder.\',\n \'Stopping reminder.\',\n
)\n )\n
</string> </value> </string> </value>
......
...@@ -54,12 +54,10 @@ ...@@ -54,12 +54,10 @@
if REQUEST is not None:\n if REQUEST is not None:\n
raise Unauthorized\n raise Unauthorized\n
\n \n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n notification_message = context.getPortalObject().portal_notifications.getDocumentValue(reference="slapos-crm.delete.reminder.escalation")\n
2,\n if notification_message is None:\n
\'service_module/slapos_crm_delete_reminder\',\n subject = \'Acknowledgment: instances deleted\'\n
\'service_module/slapos_crm_delete_acknowledgement\',\n body = """Dear user,\n
\'Acknowledgment: instances deleted\',\n
"""Dear user,\n
\n \n
Despite our last reminder, you still have an unpaid invoice on %s.\n Despite our last reminder, you still have an unpaid invoice on %s.\n
We will now delete all your instances.\n We will now delete all your instances.\n
...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca ...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca
\n \n
Regards,\n Regards,\n
The slapos team\n The slapos team\n
""" % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl(),\n """ % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl()\n
else:\n
subject = notification_message.getTitle()\n
body = notification_message.convert(format=\'text\')[1]\n
\n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n
2,\n
\'service_module/slapos_crm_delete_reminder\',\n
\'service_module/slapos_crm_delete_acknowledgement\',\n
subject,\n
body,\n
\'Deleting acknowledgment.\',\n \'Deleting acknowledgment.\',\n
)\n )\n
</string> </value> </string> </value>
......
...@@ -54,12 +54,10 @@ ...@@ -54,12 +54,10 @@
if REQUEST is not None:\n if REQUEST is not None:\n
raise Unauthorized\n raise Unauthorized\n
\n \n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n notification_message = context.getPortalObject().portal_notifications.getDocumentValue(reference="slapos-crm.stop.acknowledgment.escalation")\n
13,\n if notification_message is None:\n
\'service_module/slapos_crm_stop_acknowledgement\',\n subject = \'Last reminder: invoice payment requested\'\n
\'service_module/slapos_crm_delete_reminder\',\n body = """Dear user,\n
\'Last reminder: invoice payment requested\',\n
"""Dear user,\n
\n \n
We would like to remind you the unpaid invoice you have on %s.\n We would like to remind you the unpaid invoice you have on %s.\n
If no payment is done during the coming days, we will delete all your instances.\n If no payment is done during the coming days, we will delete all your instances.\n
...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca ...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca
\n \n
Regards,\n Regards,\n
The slapos team\n The slapos team\n
""" % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl(),\n """ % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl()\n
else:\n
subject = notification_message.getTitle()\n
body = notification_message.convert(format=\'text\')[1]\n
\n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n
13,\n
\'service_module/slapos_crm_stop_acknowledgement\',\n
\'service_module/slapos_crm_delete_reminder\',\n
subject,\n
body,\n
\'Deleting reminder.\',\n \'Deleting reminder.\',\n
)\n )\n
</string> </value> </string> </value>
......
...@@ -54,12 +54,10 @@ ...@@ -54,12 +54,10 @@
if REQUEST is not None:\n if REQUEST is not None:\n
raise Unauthorized\n raise Unauthorized\n
\n \n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n notification_message = context.getPortalObject().portal_notifications.getDocumentValue(reference="slapos-crm.stop.reminder.escalation")\n
7,\n if notification_message is None:\n
\'service_module/slapos_crm_stop_reminder\',\n subject = \'Acknowledgment: instances stopped\'\n
\'service_module/slapos_crm_stop_acknowledgement\',\n body = """Dear user,\n
\'Acknowledgment: instances stopped\',\n
"""Dear user,\n
\n \n
Despite our last reminder, you still have an unpaid invoice on %s.\n Despite our last reminder, you still have an unpaid invoice on %s.\n
We will now stop all your current instances to free some hardware resources.\n We will now stop all your current instances to free some hardware resources.\n
...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca ...@@ -68,7 +66,17 @@ Do not hesitate to visit the web forum (http://community.slapos.org/forum) in ca
\n \n
Regards,\n Regards,\n
The slapos team\n The slapos team\n
""" % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl(),\n """ % context.getPortalObject().portal_preferences.getPreferredSlaposWebSiteUrl()\n
else:\n
subject = notification_message.getTitle()\n
body = notification_message.convert(format=\'text\')[1]\n
\n
return context.RegularisationRequest_checkToTriggerNextEscalationStep(\n
7,\n
\'service_module/slapos_crm_stop_reminder\',\n
\'service_module/slapos_crm_stop_acknowledgement\',\n
subject,\n
body,\n
\'Stopping acknowledgment.\',\n \'Stopping acknowledgment.\',\n
)\n )\n
</string> </value> </string> </value>
......
...@@ -89,6 +89,63 @@ The slapos team ...@@ -89,6 +89,63 @@ The slapos team
expected_text_content.splitlines())])) expected_text_content.splitlines())]))
self.assertEquals(event.getSimulationState(), 'delivered') self.assertEquals(event.getSimulationState(), 'delivered')
@simulate('NotificationTool_getDocumentValue',
'reference=None',
'assert reference == "slapos-crm.create.regularisation.request"\n' \
'return context.restrictedTraverse(' \
'context.REQUEST["test_addRegularisationRequest_notification_message"])')
@simulate('Entity_statBalance', '*args, **kwargs', 'return "1"')
def test_addRegularisationRequest_notification_message(self):
for preference in \
self.portal.portal_catalog(portal_type="System Preference"):
preference = preference.getObject()
if preference.getPreferenceState() == 'global':
preference.setPreferredSlaposWebSiteUrl('http://foobar.org/')
person = self.createPerson()
new_id = self.generateNewId()
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
title='Test NM title %s' % new_id,
text_content='Test NM content<br/>%s<br/>' % new_id,
content_type='text/html',
)
self.portal.REQUEST\
['test_addRegularisationRequest_notification_message'] = \
notification_message.getRelativeUrl()
before_date = DateTime()
ticket, event = person.Person_checkToCreateRegularisationRequest()
after_date = DateTime()
self.assertEquals(ticket.getPortalType(), 'Regularisation Request')
self.assertEquals(ticket.getSimulationState(), 'suspended')
self.assertEquals(ticket.getSourceProject(), person.getRelativeUrl())
self.assertEquals(ticket.getResource(),
'service_module/slapos_crm_acknowledgement')
self.assertEquals(ticket.getTitle(),
'Account regularisation expected for "%s"' % person.getTitle())
self.assertEquals(ticket.getDestination(),
person.getRelativeUrl())
self.assertEquals(ticket.getDestinationDecision(),
person.getRelativeUrl())
self.assertEquals(event.getPortalType(), 'Mail Message')
self.assertEquals(event.getResource(),
'service_module/slapos_crm_acknowledgement')
self.assertTrue(event.getStartDate() >= before_date)
self.assertTrue(event.getStopDate() <= after_date)
self.assertEquals(event.getTitle(),
'Test NM title %s' % new_id)
self.assertEquals(event.getDestination(),
person.getRelativeUrl())
self.assertEquals(event.getSource(),
ticket.getSource())
expected_text_content = 'Test NM content\n%s\n' % new_id
self.assertEquals(event.getTextContent(), expected_text_content,
'\n'.join([x for x in difflib.unified_diff(
event.getTextContent().splitlines(),
expected_text_content.splitlines())]))
self.assertEquals(event.getSimulationState(), 'delivered')
# def test_addRegularisationRequest_do_not_duplicate_ticket(self): # def test_addRegularisationRequest_do_not_duplicate_ticket(self):
# person = self.createPerson() # person = self.createPerson()
...@@ -855,6 +912,41 @@ The slapos team ...@@ -855,6 +912,41 @@ The slapos team
'Stopping reminder.'), 'Stopping reminder.'),
ticket.workflow_history['edit_workflow'][-1]['comment']) ticket.workflow_history['edit_workflow'][-1]['comment'])
@simulate('NotificationTool_getDocumentValue',
'reference=None',
'assert reference == "slapos-crm.acknowledgment.escalation"\n' \
'return context.restrictedTraverse(' \
'context.REQUEST["test_checkToTriggerNextEscalationStep_notification_message"])')
@simulate('RegularisationRequest_checkToTriggerNextEscalationStep',
'day, current, next, title, text_content, comment, REQUEST=None',
'context.portal_workflow.doActionFor(' \
'context, action="edit_action", ' \
'comment="Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s" % (day, current, next, title, text_content, comment))')
def test_checkToTriggerNextEscalationStep_notification_message(self):
ticket = self.createRegularisationRequest()
new_id = self.generateNewId()
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
title='Test NM title %s' % new_id,
text_content='Test NM content<br/>%s<br/>' % new_id,
content_type='text/html',
)
self.portal.REQUEST\
['test_checkToTriggerNextEscalationStep_notification_message'] = \
notification_message.getRelativeUrl()
ticket.RegularisationRequest_triggerAcknowledgmentEscalation()
self.assertEqual(
'Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s' % \
(38,
'service_module/slapos_crm_acknowledgement',
'service_module/slapos_crm_stop_reminder',
'Test NM title %s' % new_id,
'Test NM content\n%s\n' % new_id,
'Stopping reminder.'),
ticket.workflow_history['edit_workflow'][-1]['comment'])
class TestSlapOSRegularisationRequest_triggerStopReminderEscalation( class TestSlapOSRegularisationRequest_triggerStopReminderEscalation(
testSlapOSMixin): testSlapOSMixin):
...@@ -906,6 +998,41 @@ The slapos team ...@@ -906,6 +998,41 @@ The slapos team
'Stopping acknowledgment.'), 'Stopping acknowledgment.'),
ticket.workflow_history['edit_workflow'][-1]['comment']) ticket.workflow_history['edit_workflow'][-1]['comment'])
@simulate('NotificationTool_getDocumentValue',
'reference=None',
'assert reference == "slapos-crm.stop.reminder.escalation"\n' \
'return context.restrictedTraverse(' \
'context.REQUEST["test_checkToTriggerNextEscalationStep_notification_message"])')
@simulate('RegularisationRequest_checkToTriggerNextEscalationStep',
'day, current, next, title, text_content, comment, REQUEST=None',
'context.portal_workflow.doActionFor(' \
'context, action="edit_action", ' \
'comment="Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s" % (day, current, next, title, text_content, comment))')
def test_checkToTriggerNextEscalationStep_notification_message(self):
ticket = self.createRegularisationRequest()
new_id = self.generateNewId()
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
title='Test NM title %s' % new_id,
text_content='Test NM content<br/>%s<br/>' % new_id,
content_type='text/html',
)
self.portal.REQUEST\
['test_checkToTriggerNextEscalationStep_notification_message'] = \
notification_message.getRelativeUrl()
ticket.RegularisationRequest_triggerStopReminderEscalation()
self.assertEqual(
'Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s' % \
(7,
'service_module/slapos_crm_stop_reminder',
'service_module/slapos_crm_stop_acknowledgement',
'Test NM title %s' % new_id,
'Test NM content\n%s\n' % new_id,
'Stopping acknowledgment.'),
ticket.workflow_history['edit_workflow'][-1]['comment'])
class TestSlapOSRegularisationRequest_triggerStopAcknowledgmentEscalation( class TestSlapOSRegularisationRequest_triggerStopAcknowledgmentEscalation(
testSlapOSMixin): testSlapOSMixin):
...@@ -957,6 +1084,41 @@ The slapos team ...@@ -957,6 +1084,41 @@ The slapos team
'Deleting reminder.'), 'Deleting reminder.'),
ticket.workflow_history['edit_workflow'][-1]['comment']) ticket.workflow_history['edit_workflow'][-1]['comment'])
@simulate('NotificationTool_getDocumentValue',
'reference=None',
'assert reference == "slapos-crm.stop.acknowledgment.escalation"\n' \
'return context.restrictedTraverse(' \
'context.REQUEST["test_checkToTriggerNextEscalationStep_notification_message"])')
@simulate('RegularisationRequest_checkToTriggerNextEscalationStep',
'day, current, next, title, text_content, comment, REQUEST=None',
'context.portal_workflow.doActionFor(' \
'context, action="edit_action", ' \
'comment="Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s" % (day, current, next, title, text_content, comment))')
def test_checkToTriggerNextEscalationStep_notification_message(self):
ticket = self.createRegularisationRequest()
new_id = self.generateNewId()
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
title='Test NM title %s' % new_id,
text_content='Test NM content<br/>%s<br/>' % new_id,
content_type='text/html',
)
self.portal.REQUEST\
['test_checkToTriggerNextEscalationStep_notification_message'] = \
notification_message.getRelativeUrl()
ticket.RegularisationRequest_triggerStopAcknowledgmentEscalation()
self.assertEqual(
'Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s' % \
(13,
'service_module/slapos_crm_stop_acknowledgement',
'service_module/slapos_crm_delete_reminder',
'Test NM title %s' % new_id,
'Test NM content\n%s\n' % new_id,
'Deleting reminder.'),
ticket.workflow_history['edit_workflow'][-1]['comment'])
class TestSlapOSRegularisationRequest_triggerDeleteReminderEscalation( class TestSlapOSRegularisationRequest_triggerDeleteReminderEscalation(
testSlapOSMixin): testSlapOSMixin):
...@@ -1008,6 +1170,41 @@ The slapos team ...@@ -1008,6 +1170,41 @@ The slapos team
'Deleting acknowledgment.'), 'Deleting acknowledgment.'),
ticket.workflow_history['edit_workflow'][-1]['comment']) ticket.workflow_history['edit_workflow'][-1]['comment'])
@simulate('NotificationTool_getDocumentValue',
'reference=None',
'assert reference == "slapos-crm.delete.reminder.escalation"\n' \
'return context.restrictedTraverse(' \
'context.REQUEST["test_checkToTriggerNextEscalationStep_notification_message"])')
@simulate('RegularisationRequest_checkToTriggerNextEscalationStep',
'day, current, next, title, text_content, comment, REQUEST=None',
'context.portal_workflow.doActionFor(' \
'context, action="edit_action", ' \
'comment="Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s" % (day, current, next, title, text_content, comment))')
def test_checkToTriggerNextEscalationStep_notification_message(self):
ticket = self.createRegularisationRequest()
new_id = self.generateNewId()
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
title='Test NM title %s' % new_id,
text_content='Test NM content<br/>%s<br/>' % new_id,
content_type='text/html',
)
self.portal.REQUEST\
['test_checkToTriggerNextEscalationStep_notification_message'] = \
notification_message.getRelativeUrl()
ticket.RegularisationRequest_triggerDeleteReminderEscalation()
self.assertEqual(
'Visited by RegularisationRequest_checkToTriggerNextEscalationStep ' \
'%s %s %s %s %s %s' % \
(2,
'service_module/slapos_crm_delete_reminder',
'service_module/slapos_crm_delete_acknowledgement',
'Test NM title %s' % new_id,
'Test NM content\n%s\n' % new_id,
'Deleting acknowledgment.'),
ticket.workflow_history['edit_workflow'][-1]['comment'])
class TestSlapOSRegularisationRequest_stopHostingSubscriptionList( class TestSlapOSRegularisationRequest_stopHostingSubscriptionList(
testSlapOSMixin): testSlapOSMixin):
......
19 20
\ No newline at end of file \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment