From: <ke...@us...> - 2006-08-04 12:10:34
|
Revision: 3386 Author: kevca Date: 2006-08-04 05:10:20 -0700 (Fri, 04 Aug 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3386&view=rev Log Message: ----------- Fix for AddNoteAndClose lacks rules (#1533965) Modified Paths: -------------- MailManager/branches/RELENG_2_1/CHANGES.txt MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py Added Paths: ----------- MailManager/branches/RELENG_2_1/ruleset/data/queuesystem_2_1_7.py Modified: MailManager/branches/RELENG_2_1/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-08-03 10:36:25 UTC (rev 3385) +++ MailManager/branches/RELENG_2_1/CHANGES.txt 2006-08-04 12:10:20 UTC (rev 3386) @@ -37,6 +37,7 @@ - AppendToTicket does not requeue (#1513442) - Error viewing tickets in MySQL (#1518686) - Create ticket marks wrong missing field (#1510547) +- AddNoteAndClose lacks rules (#1533965) * PERFORMANCE ISSUES - Snapshot reports unusable at scale (#1521221) - Reporting performance (#1521220) Modified: MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py =================================================================== --- MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py 2006-08-03 10:36:25 UTC (rev 3385) +++ MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py 2006-08-04 12:10:20 UTC (rev 3386) @@ -388,8 +388,19 @@ # Update the mversion to show we are complete self.mversion = 'v2_1_12' +def migrate_v2_1_12_v2_1_13(self, migrationParams): + """ Fixes AddNoteAndClose lacks rules (#1533965) + """ + # Fixes AddNoteAndClose lacks rules (#1533965) + self.engine.setup(rsname = 'queuesystem_2_1_7') + self.sql.modifyTicketRulesets( + sqv_new_ruleset = 'queuesystem_2_1_7' + ) + # Update the mversion to show we are complete + self.mversion = 'v2_1_12' + def migrate_convert_postgres_unicode(self, migrationParams): """ Convert postgres database to using unicode """ Copied: MailManager/branches/RELENG_2_1/ruleset/data/queuesystem_2_1_7.py (from rev 3385, MailManager/branches/RELENG_2_1/ruleset/data/queuesystem_2_1_6.py) =================================================================== --- MailManager/branches/RELENG_2_1/ruleset/data/queuesystem_2_1_7.py (rev 0) +++ MailManager/branches/RELENG_2_1/ruleset/data/queuesystem_2_1_7.py 2006-08-04 12:10:20 UTC (rev 3386) @@ -0,0 +1,480 @@ +# +# Ruleset description for mailmanager2.1 with the queueing support added. +# This ruleset is basically a clone of the ruleset adding a new state +# (Queued), and dealing with some new events +# + +try: + import ruleset +except ImportError: + from Products.MailManager import ruleset + +events = [] +states = [ + 'Received', + 'Open', + 'Closed', + 'Hold', + 'Spam', + 'Overdue', + 'Queued' +] + +############################################################################# +# +# User Interface Methods +# + +# +# Mass Updates +# These are special case events. At present, we cannot configure or restrict +# them in any way. +# + +event = ruleset.events.MassChangeUIEvent('ChangeSelected') +events.append(event) + +event = ruleset.events.FilterEvent('ApplyFilter') +events.append(event) + +# +# Viewing a ticket +# + +event = ruleset.events.UserInterfaceEvent('ViewTicket') + +for state in states: + event.addTransition( + state = state, + attrs = ['!Viewed'], + actions = [ruleset.actions.SetAttribute('Viewed')] + ) +events.append(event) + +# +# Adding a note +# + +event = ruleset.events.UserInterfaceEvent('AddNote') +event.addTransition( + state = 'Open', +) +event.addTransition( + state = 'Spam', +) +event.addTransition( + state = 'Hold', +) +event.addTransition( + state = 'Overdue', +) +event.addTransition( + state = 'Closed', +) +events.append(event) + +# +# Adding a note and closing +# + +event = ruleset.events.UserInterfaceEvent('AddNoteAndClose') +event.addTransition( + state = 'Open', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Spam', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Hold', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Overdue', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Closed', +) +events.append(event) + +# +# Sending a reply +# + +event = ruleset.events.UserInterfaceEvent('SendReply') +event.addTransition( + state = 'Open', + attrs = [], + newstate = 'Open', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Closed', + attrs = [], + newstate = 'Closed', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Overdue', + attrs = [], + newstate = 'Open', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Hold', + attrs = [], + newstate = 'Hold', + actions = [ruleset.actions.SetAttribute('Responded')] +) +events.append(event) + +# +# Send and close +# + +event = ruleset.events.UserInterfaceEvent('SendAndClose') +event.addTransition( + state = 'Open', + attrs = ['!OpenChildren'], + newstate = 'Closed', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Closed', + attrs = ['!OpenChildren'], + newstate = 'Closed', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Hold', + attrs = ['!OpenChildren'], + newstate = 'Closed', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Overdue', + attrs = ['!OpenChildren'], + newstate = 'Closed', + actions = [ruleset.actions.SetAttribute('Responded')] +) +events.append(event) + +# +# Send and hold +# + +event = ruleset.events.UserInterfaceEvent('SendAndHold') +event.addTransition( + state = 'Open', + attrs = [], + newstate = 'Hold', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Closed', + attrs = [], + newstate = 'Hold', + actions = [ruleset.actions.SetAttribute('Responded')] +) +event.addTransition( + state = 'Overdue', + attrs = [], + newstate = 'Hold', + actions = [ruleset.actions.SetAttribute('Responded')] +) +events.append(event) + +# +# Close +# + +event = ruleset.events.UserInterfaceEvent('Close') +event.addTransition( + state = 'Open', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Closed', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +event.addTransition( + state = 'Hold', + attrs = ['!OpenChildren'], + newstate = 'Closed', +) +events.append(event) + + +# +# Get next ticket from queue +# + +event = ruleset.events.UserInterfaceEvent('GetNextTicketFromQueue') +event.addTransition( + state = 'Queued', + attrs = [], + newstate = 'Open', + actions = [ruleset.actions.AssignUser('_$Current')] +) +events.append(event) + + +# +# Return ticket to queue +# + +event = ruleset.events.UserInterfaceEvent('ReturnToQueue') +event.addTransition( + state = 'Open', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Hold', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Closed', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Overdue', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +events.append(event) + + +# # +# # Update Ticket Details +# # +# +# event = ruleset.events.UserInterfaceModify('UpdateTicketDetails') +# event.addTransition( +# state = 'Any', +# newstate = 'Any', +# actions = 'Any' +# ) +# +# event = ruleset.events.UserInterfaceModify('UpdateTicketBatch') +# event.addTransition( +# state = 'Any', +# newstate = 'Any', +# actions = 'Any' +# ) +# +# # +# # Delete User And Reassign +# # +# +# event = ruleset.events.UserInterfaceEvent('DeleteUserAndReassign') +# event.addTransition( +# state = 'Any', +# actions = [ReassignTicket()] +# ) +# +# # +# # Restore Tickets +# # + + +############################################################################# +# +# getMail methods +# + +event = ruleset.events.GetMailEvent('AppendToTicket') +# If an account is set to use queueing, requeue the ticket rather than +# reopening it +event.addTransition( + state = 'Closed', + newstate = 'Queued', + attrs = ['_AssignQueue'], + actions = [ruleset.actions.AssignUser('$QueueUser')], +) +# Otherwise, open it and notify the user +event.addTransition( + state = 'Closed', + newstate = 'Open', + attrs = ['!_AssignQueue'], + actions = [ruleset.actions.AlertOwner('Opened'), ruleset.actions.AlertGroup('Opened')], +) +# If the ticket is already open, notify the user that is has +# been updated +event.addTransition( + state = 'Open', + newstate = 'Open', + actions = [ruleset.actions.AlertOwner('Updated'), ruleset.actions.AlertGroup('Updated')], +) +# No notifications for spam or for tickets held by a role account +event.addTransition( + state = 'Spam', + newstate = 'Spam', +) +event.addTransition( + state = 'Queued', + newstate = 'Queued', +) +event.addTransition( + state = 'Overdue', + newstate = 'Overdue', + actions = [ruleset.actions.AlertOwner('Updated'), ruleset.actions.AlertGroup('Updated')], +) +events.append(event) + + + +############################################################################# +# +# Time based methods +# + +event = ruleset.events.TimeEvent('Overdue') +event.addTransition( + state = 'Open', + attrs = ['!Responded'], + newstate = 'Overdue', + actions = [ruleset.actions.AlertOwner('Overdue'), ruleset.actions.AlertGroup('Overdue')] +) +events.append(event) + + +event = ruleset.events.TimeEvent('AutoLogout') +event.addTransition( + state = 'Open', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Hold', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Closed', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +event.addTransition( + state = 'Overdue', + attrs = ['_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) +events.append(event) + + +############################################################################# +# +# Epsilon Transitions +# + +event = ruleset.events.EpsilonEvent('Epsilon') + +# Spam goes direct to the spam state +event.addTransition( + state = 'Received', + attrs = ['Spam', '!_AssignQueue'], + newstate = 'Spam', + actions = [] +) + +# Expicit state for assign queue situation. We want to deal with spam +# differently in the long run. Later on, there will be a spam role +# account for this to work more effectively. +event.addTransition( + state = 'Received', + attrs = ['Spam', '_AssignQueue'], + newstate = 'Spam', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) + +# Queue any tickets which are assigned to a queue +event.addTransition( + state = 'Received', + attrs = ['!Spam', '_AssignQueue'], + newstate = 'Queued', + actions = [ruleset.actions.AssignUser('$QueueUser')] +) + +# Tickets assigned to a user or a group should go straight to the Open state +# Don't reassign the ticket to any user, as the AccountPluggableBrain will +# currently do that from the assignment engine (this will be replaced at +# a later stage, merging the assignment engine with the queueing rules) +event.addTransition( + state = 'Received', + attrs = ['!Spam', '!_AssignQueue'], + newstate = 'Open', + actions = [ruleset.actions.AlertOwner('Opened'), ruleset.actions.AlertGroup('Opened')], +) +events.append(event) + +# +# +############################################################################# + + +ruleset = { + 'eventnames' : [ + 'Epsilon', # Internal + 'Overdue', # Overdue Event + 'ViewTicket', # User Interface + 'Send', # User Interface + 'Close', # User Interface + 'AddNote', # User Interface + 'SendReply', # User Interface + 'SendAndClose', # User Interface + 'SendAndHold', # User Interface + 'UpdateTicketDetails', # User Interface + 'UpdateTicketBatch', # User Interface + 'DeleteUserAndReassign', # User Interface + 'RestoreTickets', # User Interface + 'ReturnToQueue', # User Interface + 'GetNextTicketFromQueue', # User Interface + 'AppendToTicket', # Get Mail + 'AutoLogout', # Timed Event + ], + + 'actions' : [ + 'AlertOwner', + 'AlertGroup', + 'AlertSender', + 'SetAttribute', + 'UnsetAttribute', + 'ReassignTicket', + ], + + 'states' : states, + + 'attributes' : [ + 'OpenChildren', + 'Responded', + 'Viewed', + 'Spam' + ], + + 'categories' : [ + 'sales', + 'support' + ], + + 'events' : events +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |