[Erp5-report] r19411 - /erp5/trunk/products/ERP5/tests/testCrmReports.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Feb 19 18:04:29 CET 2008
Author: jerome
Date: Tue Feb 19 18:04:28 2008
New Revision: 19411
URL: http://svn.erp5.org?rev=19411&view=rev
Log:
Test for new CRM reports originally made by daniel with the help of thierry.
Added:
erp5/trunk/products/ERP5/tests/testCrmReports.py
Added: erp5/trunk/products/ERP5/tests/testCrmReports.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testCrmReports.py?rev=19411&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/tests/testCrmReports.py (added)
+++ erp5/trunk/products/ERP5/tests/testCrmReports.py Tue Feb 19 18:04:28 2008
@@ -1,0 +1,2197 @@
+#############################################################################
+#
+# Copyright 2007 Nexedi SA Contributors. All Rights Reserved.
+# Thierry Brettnacher <tb at nexedi.com>
+# Daniel Feliubadalo <daniel at sip2000.com>
+# Jerome Perrin <jerome at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+"""Tests Standards ERP5 Crm Reports
+"""
+import unittest
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Products.ERP5Type.tests.utils import reindex
+from AccessControl.SecurityManagement import newSecurityManager
+from DateTime import DateTime
+
+class CrmTestCase(ERP5TypeTestCase):
+ """Tests starts with a preference activated for self.my_organisation, logged in
+ as a user with Assignee, Assignor and Author role.
+
+ All documents created appart from this configuration will be deleted in
+ teardown. So users of this test case are encouraged to create new documents
+ rather than modifying default documents.
+ """
+
+ username = 'username'
+
+
+ def _doWorkflowAction(self, ob, action,**kw):
+ self.portal.portal_workflow.doActionFor(ob, action,
+ comment = 'for unit test',**kw)
+
+ @reindex
+ def _makeOneTicket(self, portal_type='Campaign',
+ start_date=None,
+ stop_date=None,
+ simulation_state='draft', **kw):
+ """Creates an ticket, and edit it with kw.
+
+ The default settings is for self.section.
+ You can pass a list of mapping as lines, then lines will be created
+ using this information.
+ """
+ kw.setdefault('start_date', start_date)
+ kw.setdefault('stop_date', stop_date)
+ kw.setdefault('resource', 'service_module/1')
+ tk=None
+ if portal_type == ('Campaign'):
+ tk = self.campaign_module.newContent(portal_type=portal_type,**kw)
+ elif portal_type == ('Meeting'):
+ tk = self.meeting_module.newContent(portal_type=portal_type,**kw)
+ elif portal_type == ('Sale Opportunity'):
+ tk = self.sale_opportunity_module.newContent(portal_type=portal_type,**kw)
+ elif portal_type == ('Support Request'):
+ tk = self.support_request_module.newContent(portal_type=portal_type,**kw)
+
+ if simulation_state == 'validated':
+ tk.validate()
+ elif simulation_state == 'offered': #for Sale Opportunity workflow
+ tk.offer()
+ return tk
+
+ def _makeOneEvent(self, portal_type='Fax Message',
+ start_date=DateTime(),
+ simulation_state='draft',
+ follow_up_ticket_title = "",
+ follow_up_ticket_type = "Campaign",
+ **kw):
+ """Creates an event, and edit it with kw.
+
+ The default settings is for self.section.
+ You can pass a list of mapping as lines, then lines will be created
+ using this information.
+ """
+ kw.setdefault('start_date', start_date)
+ kw.setdefault('resource', 'service_module/2')
+ ev = self.event_module.newContent(portal_type=portal_type,**kw)
+
+ if simulation_state == 'assigned':
+ ticket=self.portal.restrictedTraverse(ev.getFollowUp())
+ self._doWorkflowAction(ev,'assign_action',
+ follow_up_ticket_type = ticket.getPortalType(),
+ follow_up_ticket_title = ticket.getTitle())
+ elif simulation_state == 'planned':
+ ev.plan()
+ elif simulation_state == 'posted':
+ ev.start()
+ elif simulation_state == 'delivered':
+ ev.start()
+ ev.deliver()
+ elif simulation_state == 'new':
+ ev.receive()
+ elif simulation_state == 'acknowledged':
+ ticket=self.portal.restrictedTraverse(ev.getFollowUp())
+ self._doWorkflowAction(ev,'assign_action',
+ follow_up_ticket_type = ticket.getPortalType(),
+ follow_up_ticket_title = ticket.getTitle())
+ ev.acknowledge()
+ elif simulation_state == 'cancelled':
+ ev.receive()
+ ev.cancel()
+ elif simulation_state == 'deleted':
+ ev.delete()
+ elif simulation_state == 'expired':
+ ev.receive()
+ ev.expire()
+ elif simulation_state == 'responded':
+ ev.receive()
+ ev.respond()
+ elif simulation_state == 'started':
+ ev.start()
+ elif simulation_state == 'ordered':
+ ev.plan()
+ ev.order()
+ return ev
+
+ def login(self):
+ """login with Manager roles."""
+ uf = self.getPortal().acl_users
+ uf._doAddUser('manager', 'manager', ['Manager', 'Assignee', 'Assignor',
+ 'Associate', 'Auditor', 'Author'], [])
+ user = uf.getUserById('manager').__of__(uf)
+ newSecurityManager(None, user)
+
+ def setUp(self):
+ """Setup the fixture.
+ """
+ ERP5TypeTestCase.setUp(self)
+ self.portal = self.getPortal()
+ self.event_module = self.portal.event_module
+ self.campaign_module = self.portal.campaign_module
+ self.meeting_module = self.portal.meeting_module
+ self.sale_opportunity_module = self.portal.sale_opportunity_module
+ self.support_request_module = self.portal.support_request_module
+ self.organisation_module = self.portal.organisation_module
+ self.person_module = self.portal.person_module
+ self.portal_categories = self.portal.portal_categories
+
+
+ # create group category
+ if not self.portal_categories['group'].has_key('demo_group'):
+ group=self.portal_categories.group
+ subgroup = group.newContent(portal_type='Category',
+ title='demo_group',
+ reference='demo_group',
+ id='demo_group')
+ # create users and organisations
+ if not self.person_module.has_key('Person_1'):
+ user = self.portal.person_module.newContent(
+ portal_type='Person',
+ reference='Person_1',
+ title='Person_1',
+ id='Person_1')
+ user.validate()
+ if not self.person_module.has_key('Person_2'):
+ user = self.portal.person_module.newContent(
+ portal_type='Person',
+ reference='Person_2',
+ title='Person_2',
+ id='Person_2')
+ user.validate()
+ if not self.person_module.has_key('Person_3'):
+ user = self.portal.person_module.newContent(
+ portal_type='Person',
+ reference='Person_3',
+ title='Person_3',
+ id='Person_3')
+ user.validate()
+ if not self.organisation_module.has_key('Organisation_1'):
+ org = self.portal.organisation_module.newContent(
+ portal_type='Organisation',
+ reference='Organisation_1',
+ title='Organisation_1',
+ id='Organisation_1')
+ org.validate()
+ if not self.organisation_module.has_key('Organisation_2'):
+ org = self.portal.organisation_module.newContent(
+ portal_type='Organisation',
+ reference='Organisation_2',
+ title='Organisation_2',
+ id='Organisation_2')
+ org.validate()
+ if not self.organisation_module.has_key('My_organisation'):
+ org = self.portal.organisation_module.newContent(
+ portal_type='Organisation',
+ reference='My_organisation',
+ title='My_organisation',
+ group_value=self.portal_categories['group'].demo_group,
+ id='My_organisation')
+ org.validate()
+
+ # make sure documents are validated
+ for module in (self.organisation_module,
+ self.person_module):
+ for doc in module.objectValues():
+ doc.validate()
+
+ # and all this available to catalog
+ get_transaction().commit()
+ self.tic()
+
+
+ def tearDown(self):
+ """Remove all documents.
+ """
+ get_transaction().abort()
+ self.campaign_module.manage_delObjects(
+ list(self.campaign_module.objectIds()))
+ self.meeting_module.manage_delObjects(
+ list(self.meeting_module.objectIds()))
+ self.sale_opportunity_module.manage_delObjects(
+ list(self.sale_opportunity_module.objectIds()))
+ self.support_request_module.manage_delObjects(
+ list(self.support_request_module.objectIds()))
+ self.organisation_module.manage_delObjects(
+ list(self.campaign_module.objectIds()))
+ self.person_module.manage_delObjects(
+ list(self.person_module.objectIds()))
+ self.portal_categories['group'].manage_delObjects((['demo_group',]))
+ self.event_module.manage_delObjects(
+ list(self.event_module.objectIds()))
+
+ get_transaction().commit()
+ self.tic()
+ ERP5TypeTestCase.tearDown(self)
+
+ def getBusinessTemplateList(self):
+ """Returns list of BT to be installed."""
+ return ('erp5_base', 'erp5_crm', )
+
+
+class TestCrmReports(CrmTestCase):
+ """Test Crm reports
+
+ Test basic cases of gathering data to render reports, the purpose of those
+ tests is to exercise basic reporting features to make sure no regression
+ happen. Input data used for tests usually contain edge cases, for example:
+ * movements at the boundaries of the period.
+ * movements with other simulation states.
+ * movements with node in the section_category we want to exclude (Persons).
+ * movements with source & destination for other sections.
+ """
+ def getTitle(self):
+ return "Crm Reports"
+
+ # utility methods for ERP5 Report -> TODO move in framework !
+ def getReportSectionList(self, report_name):
+ """Get the list of report sections in a report."""
+ report = getattr(self.portal, report_name)
+ report_method = getattr(self.portal, report.report_method)
+ return report_method()
+
+ def getListBoxLineList(self, report_section):
+ """Render the listbox in a report section, return None if no listbox exists
+ in the report_section.
+ """
+ result = None
+ here = report_section.getObject(self.portal)
+ report_section.pushReport(self.portal)
+ form = getattr(here, report_section.getFormId())
+ if form.has_field('listbox'):
+ result = form.listbox.get_value('default',
+ render_format='list',
+ REQUEST=self.portal.REQUEST)
+ report_section.popReport(self.portal)
+ return result
+
+ def checkLineProperties(self, line, **kw):
+ """Check properties of a report line.
+ """
+ for k, v in kw.items():
+ self.assertEquals(v, line.getColumnProperty(k),
+ '`%s`: expected: %r actual: %r' % (k, v, line.getColumnProperty(k)))
+ # /utility methods for ERP5 Report
+
+ def testCampaignStatus(self):
+ # Campaign Status report.
+
+ # First campaign
+ first = self._makeOneTicket(
+ portal_type='Campaign',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second campaign
+ second = self._makeOneTicket(
+ portal_type='Campaign',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first campaign
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut3=self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventIn1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=eventOut1.getRelativeUrl())
+ # creating one free event for test
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second campaign
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ eventInt1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=eventOut1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'CampaignModule_viewCampaignStatusReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 2 campaigns
+ self.assertEquals(2, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['title', 'ticket_type', 'destination_section', 'destination_decision',
+ 'source', 'start_date', 'stop_date','validation_state','outgoing',
+ 'incoming','progression','efficiency'])
+
+ # First campaign
+ self.checkLineProperties(data_line_list[0],
+ title='First One',
+ ticket_type = first.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 11, 30),
+ start_date = DateTime(2007, 2, 2),
+ destination_section = first.getDestinationSectionTitle(),
+ destination_decision = self.person_module.Person_1.getTitle(),
+ source = self.person_module.Person_2.getTitle(),
+ validation_state = 'Open',
+ outgoing = 3,
+ incoming = 1,
+ progression = 66.00/100,
+ efficiency = 33.00/100)
+ # Second campaign
+ self.checkLineProperties(data_line_list[1],
+ title='Second One',
+ ticket_type = second.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 12, 31),
+ start_date = DateTime(2007, 1, 2),
+ destination_section = second.getDestinationSectionTitle(),
+ destination_decision = second.getDestinationDecisionTitle(),
+ source = second.getSourceTitle(),
+ validation_state = 'Open',
+ outgoing = 2,
+ incoming = 1,
+ progression = 100.00/100,
+ efficiency = 50.00/100)
+
+ def testCampaignDetailedReport(self):
+ # Campaign Detailed report.
+
+ # First campaign
+ first = self._makeOneTicket(
+ portal_type='Campaign',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second campaign
+ second = self._makeOneTicket(
+ portal_type='Campaign',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first campaign
+ first_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out3 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=first_event_out1.getRelativeUrl())
+ # creating one free event for test
+ free_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second campaign
+ second_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_out2 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=second_event_out1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'CampaignModule_viewCampaignDetailedReport')
+ self.assertEquals(2, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[1])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 7 events
+ self.assertEquals(7, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['campaign', 'direction', 'title', 'type','destination_title_list',
+ 'source', 'start_date','stop_date','validation_state'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ ticket=first
+ event=first_event_out1
+ direction='Outgoing'
+ campaign=ticket.getTitle()
+ elif i==1:
+ ticket=first
+ event=first_event_inc1
+ direction='Incoming'
+ campaign=''
+ elif i==2:
+ ticket=first
+ event=first_event_out2
+ direction='Outgoing'
+ campaign=ticket.getTitle()
+ elif i==3:
+ ticket=first
+ event=first_event_out3
+ direction='Outgoing'
+ campaign=ticket.getTitle()
+ elif i==4:
+ ticket=second
+ event=second_event_out1
+ direction='Outgoing'
+ campaign=ticket.getTitle()
+ elif i==5:
+ ticket=second
+ event=second_event_out2
+ direction='Outgoing'
+ campaign=ticket.getTitle()
+ elif i==6:
+ ticket=second
+ event=second_event_inc1
+ direction='Incoming'
+ campaign=ticket.getTitle()
+ self.checkLineProperties(data_line_list[i],
+ campaign = campaign,
+ direction = direction,
+ type = event.getTranslatedPortalType(),
+ destination_title_list = event.getDestinationTitleList(),
+ title = event.getTitle(),
+ stop_date = event.getStopDate(),
+ start_date = event.getStartDate(),
+ source = event.getSourceTitle(),
+ validation_state = event.getTranslatedSimulationStateTitle())
+
+ def testMeetingStatus(self):
+ # Meeting Status report.
+
+ # First Meeting
+ first = self._makeOneTicket(
+ portal_type='Meeting',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Meeting
+ second = self._makeOneTicket(
+ portal_type='Meeting',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first meeting
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut3=self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventIn1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=eventOut1.getRelativeUrl())
+ # creating one free event for test
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second meeting
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ eventInt1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=eventOut1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'MeetingModule_viewMeetingStatusReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 2 meetings
+ self.assertEquals(2, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['title', 'ticket_type', 'destination_section', 'destination_decision',
+ 'destination_title','source', 'start_date', 'stop_date',
+ 'validation_state','outgoing','incoming'])
+
+ # First meeting
+ self.checkLineProperties(data_line_list[0],
+ title='First One',
+ ticket_type = first.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 11, 30),
+ start_date = DateTime(2007, 2, 2),
+ destination_section = first.getDestinationSectionTitle(),
+ destination_decision = self.person_module.Person_1.getTitle(),
+ destination_title = first.getDestinationTitle(),
+ source = self.person_module.Person_2.getTitle(),
+ validation_state = 'Open',
+ outgoing = 3,
+ incoming = 1)
+ # Second meeting
+ self.checkLineProperties(data_line_list[1],
+ title='Second One',
+ ticket_type = second.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 12, 31),
+ start_date = DateTime(2007, 1, 2),
+ destination_section = second.getDestinationSectionTitle(),
+ destination_decision = second.getDestinationDecisionTitle(),
+ destination_title = second.getDestinationTitle(),
+ source = second.getSourceTitle(),
+ validation_state = 'Open',
+ outgoing = 2,
+ incoming = 1)
+
+ def testMeetingDetailedReport(self):
+ # Meeting Detailed report.
+
+ # First Meeting
+ first = self._makeOneTicket(
+ portal_type='Meeting',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Meeting
+ second = self._makeOneTicket(
+ portal_type='Meeting',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first Meeting
+ first_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out3 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=first_event_out1.getRelativeUrl())
+ # creating one free event for test
+ free_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second Meeting
+ second_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_out2 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=second_event_out1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'MeetingModule_viewMeetingDetailedReport')
+ self.assertEquals(2, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[1])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 7 events
+ self.assertEquals(7, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['meeting', 'direction', 'title', 'type','destination_title_list',
+ 'source', 'start_date','stop_date','validation_state'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ ticket=first
+ event=first_event_out1
+ direction='Outgoing'
+ meeting=ticket.getTitle()
+ elif i==1:
+ ticket=first
+ event=first_event_inc1
+ direction='Incoming'
+ meeting=''
+ elif i==2:
+ ticket=first
+ event=first_event_out2
+ direction='Outgoing'
+ meeting=ticket.getTitle()
+ elif i==3:
+ ticket=first
+ event=first_event_out3
+ direction='Outgoing'
+ meeting=ticket.getTitle()
+ elif i==4:
+ ticket=second
+ event=second_event_out1
+ direction='Outgoing'
+ meeting=ticket.getTitle()
+ elif i==5:
+ ticket=second
+ event=second_event_out2
+ direction='Outgoing'
+ meeting=ticket.getTitle()
+ elif i==6:
+ ticket=second
+ event=second_event_inc1
+ direction='Incoming'
+ meeting=ticket.getTitle()
+ self.checkLineProperties(data_line_list[i],
+ meeting = meeting,
+ direction = direction,
+ type = event.getTranslatedPortalType(),
+ destination_title_list = event.getDestinationTitleList(),
+ title = event.getTitle(),
+ stop_date = event.getStopDate(),
+ start_date = event.getStartDate(),
+ source = event.getSourceTitle(),
+ validation_state = event.getTranslatedSimulationStateTitle())
+
+ def testSupportRequestStatus(self):
+ # Support Request Status report.
+
+ # First Support Request
+ first = self._makeOneTicket(
+ portal_type='Support Request',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Support Request
+ second = self._makeOneTicket(
+ portal_type='Support Request',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first Support Request
+ first_event_inc1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Inc 2 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc3=self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Inc 3 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Inc 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=first_event_inc1.getRelativeUrl())
+ # creating one free event for test
+ feEvInc1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second Support Request
+ second_event_inc1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_inc2 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 2 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_out1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Inc 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=second_event_inc1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'SupportRequestModule_viewSupportRequestStatusReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 2 Support Request
+ self.assertEquals(2, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['title', 'ticket_type', 'destination_section', 'destination_decision',
+ 'source', 'source_decision', 'start_date', 'stop_date',
+ 'validation_state','incoming','outgoing'])
+
+ # First Support Request
+ self.checkLineProperties(data_line_list[0],
+ title='First One',
+ ticket_type = first.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 11, 30),
+ start_date = DateTime(2007, 2, 2),
+ destination_section = first.getDestinationSectionTitle(),
+ destination_decision = self.person_module.Person_1.getTitle(),
+ source_decision = first.getSourceDecisionTitle(),
+ source = self.person_module.Person_2.getTitle(),
+ validation_state = 'Open',
+ outgoing = 1,
+ incoming = 3)
+ # Second Support Request
+ self.checkLineProperties(data_line_list[1],
+ title='Second One',
+ ticket_type = second.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 12, 31),
+ start_date = DateTime(2007, 1, 2),
+ destination_section = second.getDestinationSectionTitle(),
+ destination_decision = second.getDestinationDecisionTitle(),
+ source_decision = second.getSourceDecisionTitle(),
+ source = second.getSourceTitle(),
+ validation_state = 'Open',
+ outgoing = 1,
+ incoming = 2)
+
+ def testSupportRequestDetailedReport(self):
+ # Support Request Detailed report.
+
+ # First Support Request
+ first = self._makeOneTicket(
+ portal_type='Support Request',
+ title='First One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Support Request
+ second = self._makeOneTicket(
+ portal_type='Support Request',
+ title='Second One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first Support Request
+ first_event_inc1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Inc 2 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc3=self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Inc 3 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Inc 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=first_event_inc1.getRelativeUrl())
+ # creating one free event for test
+ feEvInc1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second Support Request
+ second_event_inc1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_inc2 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Inc 2 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_out1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Inc 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=second_event_inc1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['validation_state'] = ['validated',]
+
+ report_section_list = self.getReportSectionList(
+ 'SupportRequestModule_viewSupportRequestDetailedReport')
+ self.assertEquals(2, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[1])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 7 events
+ self.assertEquals(7, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['support_request', 'direction', 'title', 'type','destination_title_list',
+ 'source', 'start_date','stop_date','validation_state'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ ticket=first
+ event=first_event_inc1
+ direction='Incoming'
+ support_request=ticket.getTitle()
+ elif i==1:
+ ticket=first
+ event=first_event_out1
+ direction='Outgoing'
+ support_request=''
+ elif i==2:
+ ticket=first
+ event=first_event_inc2
+ direction='Incoming'
+ support_request=ticket.getTitle()
+ elif i==3:
+ ticket=first
+ event=first_event_inc3
+ direction='Incoming'
+ support_request=ticket.getTitle()
+ elif i==4:
+ ticket=second
+ event=second_event_inc1
+ direction='Incoming'
+ support_request=ticket.getTitle()
+ elif i==5:
+ ticket=second
+ event=second_event_inc2
+ direction='Incoming'
+ support_request=ticket.getTitle()
+ elif i==6:
+ ticket=second
+ event=second_event_out1
+ direction='Outgoing'
+ support_request=ticket.getTitle()
+ self.checkLineProperties(data_line_list[i],
+ support_request = support_request,
+ direction = direction,
+ type = event.getTranslatedPortalType(),
+ destination_title_list = event.getDestinationTitleList(),
+ title = event.getTitle(),
+ stop_date = event.getStopDate(),
+ start_date = event.getStartDate(),
+ source = event.getSourceTitle(),
+ validation_state = event.getTranslatedSimulationStateTitle())
+
+ def testSaleOpportunityStatus(self):
+ # Sale Opportunity Status report.
+
+ # First Sale Opportunity
+ first = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='First One',
+ simulation_state='contacted',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Sale Opportunity
+ second = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='Second One',
+ simulation_state='offered',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of first Sale Opportunity
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventOut3=self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ eventIn1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=eventOut1.getRelativeUrl())
+ # creating one free event for test
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second Sale Opportunity
+ eventOut1=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ eventOut2=self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ eventInt1=self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=eventOut1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['sale_opportunity_state'] = ['contacted','offered']
+
+ report_section_list = self.getReportSectionList(
+ 'SaleOpportunityModule_viewSaleOpportunityStatusReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 2 Sale Opportunity
+ self.assertEquals(2, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['title', 'ticket_type', 'destination_section', 'destination_decision',
+ 'source','source_decision','start_date', 'stop_date',
+ 'validation_state','outgoing','incoming'])
+
+ # First Sale Opportunity
+ self.checkLineProperties(data_line_list[0],
+ title='First One',
+ ticket_type = first.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 11, 30),
+ start_date = DateTime(2007, 2, 2),
+ destination_section = first.getDestinationSectionTitle(),
+ destination_decision = self.person_module.Person_1.getTitle(),
+ source_decision = first.getSourceDecisionTitle(),
+ source = self.person_module.Person_2.getTitle(),
+ validation_state = 'Contacted',
+ outgoing = 3,
+ incoming = 1)
+ # Second Sale Opportunity
+ self.checkLineProperties(data_line_list[1],
+ title='Second One',
+ ticket_type = second.getResourceTranslatedTitle(),
+ stop_date = DateTime(2007, 12, 31),
+ start_date = DateTime(2007, 1, 2),
+ destination_section = second.getDestinationSectionTitle(),
+ destination_decision = second.getDestinationDecisionTitle(),
+ source_decision = second.getSourceDecisionTitle(),
+ source = second.getSourceTitle(),
+ validation_state = 'Offered',
+ outgoing = 2,
+ incoming = 1)
+
+ def testSaleOpportunityDetailedReport(self):
+ # Sale Opportunity Detailed report.
+
+ # First Sale Opportunity
+ first = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='First One',
+ simulation_state='contacted',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value = self.person_module.Person_1,
+ source_value = self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ # Second Sale Opportunity
+ second = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='Second One',
+ simulation_state='offered',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events of Sale Opportunity
+ first_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Out 2 of First',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_out3 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Out 3 of First',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=first.getRelativeUrl())
+ first_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of First',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ causality=first_event_out1.getRelativeUrl())
+ # creating one free event for test
+ free_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events of second Sale Opportunity
+ second_event_out1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 1 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_out2 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Out 2 of Second',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 2, 2, 1),
+ follow_up=second.getRelativeUrl())
+ second_event_inc1 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Response to Out 1 of Second',
+ simulation_state='new',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ #create a follow-up and causality ralationship to test that
+ #only count one time by follow-up
+ causality=second_event_out1.getRelativeUrl(),
+ follow_up=second.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+ request_form['section_category'] = 'group/demo_group'
+ request_form['sale_opportunity_state'] = ['contacted','offered']
+
+ report_section_list = self.getReportSectionList(
+ 'SaleOpportunityModule_viewSaleOpportunityDetailedReport')
+ self.assertEquals(2, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[1])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 7 events
+ self.assertEquals(7, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['sale_opportunity', 'direction', 'title', 'type','destination_title_list',
+ 'source', 'start_date','stop_date','validation_state'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ ticket=first
+ event=first_event_out1
+ direction='Outgoing'
+ sale_opportunity=ticket.getTitle()
+ elif i==1:
+ ticket=first
+ event=first_event_inc1
+ direction='Incoming'
+ sale_opportunity=''
+ elif i==2:
+ ticket=first
+ event=first_event_out2
+ direction='Outgoing'
+ sale_opportunity=ticket.getTitle()
+ elif i==3:
+ ticket=first
+ event=first_event_out3
+ direction='Outgoing'
+ sale_opportunity=ticket.getTitle()
+ elif i==4:
+ ticket=second
+ event=second_event_out1
+ direction='Outgoing'
+ sale_opportunity=ticket.getTitle()
+ elif i==5:
+ ticket=second
+ event=second_event_out2
+ direction='Outgoing'
+ sale_opportunity=ticket.getTitle()
+ elif i==6:
+ ticket=second
+ event=second_event_inc1
+ direction='Incoming'
+ sale_opportunity=ticket.getTitle()
+ self.checkLineProperties(data_line_list[i],
+ sale_opportunity = sale_opportunity,
+ direction = direction,
+ type = event.getTranslatedPortalType(),
+ destination_title_list = event.getDestinationTitleList(),
+ title = event.getTitle(),
+ stop_date = event.getStopDate(),
+ start_date = event.getStartDate(),
+ source = event.getSourceTitle(),
+ validation_state = event.getTranslatedSimulationStateTitle())
+
+ def testEventActivity(self):
+ # Event Activity report.
+
+ # creating one ticket of every type
+ sale_opportunity = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='Sale Opportunity One',
+ simulation_state='contacted',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ campaign = self._makeOneTicket(
+ portal_type='Campaign',
+ title='Campaign One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+ meeting = self._makeOneTicket(
+ portal_type='Meeting',
+ title='Meeting One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+ support_request = self._makeOneTicket(
+ portal_type='Support Request',
+ title='Support Request One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events in every incoming-outgoing state related with tickets
+ event1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 1',
+ simulation_state='acknowledged',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 2',
+ simulation_state='assigned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ event3 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Event 3',
+ simulation_state='cancelled',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=meeting.getRelativeUrl())
+ event4 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Event 4',
+ simulation_state='expired',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ follow_up=support_request.getRelativeUrl())
+ event5 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 5',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event6 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 6',
+ simulation_state='responded',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ event7 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Event 7',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=meeting.getRelativeUrl())
+ event8 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Event 8',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=support_request.getRelativeUrl())
+ event9 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 9',
+ simulation_state='ordered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event10 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 10',
+ simulation_state='started',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ # creating free event for unassigned
+ free_event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ free_event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 2',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events in every non incoming-outgoing state related with tickets
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event deleted 1',
+ simulation_state='draft',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event deleted 2',
+ simulation_state='deleted',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ # creating events in incoming-outgoing state related with tickets
+ # by causality with one related event
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event causality 1',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ causality=event9.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event causality 2',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ causality=event10.getRelativeUrl())
+ # creating events related with same ticket by follow-up and causality
+ # Only must count one time (follow-up)
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event both 1',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ causality=event5.getRelativeUrl(),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event both 2',
+ simulation_state='responded',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ causality=event6.getRelativeUrl(),
+ follow_up=campaign.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+
+ report_section_list = self.getReportSectionList(
+ 'EventModule_viewEventActivityReport')
+ #Obtain 2 listbox with outgoing and incoming events
+ self.assertEquals(2, len(report_section_list))
+
+ #Outgoing
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 6 states
+ self.assertEquals(6, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['validation_state','Campaign', 'Meeting',
+ 'SaleOpportunity','SupportRequest', 'unassigned','total'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ pvalidation_state = 'Acknowledged'
+ pCampaign = 0
+ pMeeting = 0
+ pSaleOpportunity = 1
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 1
+ elif i==1:
+ pvalidation_state = 'Assigned'
+ pCampaign = 1
+ pMeeting = 0
+ pSaleOpportunity = 0
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 1
+ elif i==2:
+ pvalidation_state = 'Cancelled'
+ pCampaign = 0
+ pMeeting = 1
+ pSaleOpportunity = 0
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 1
+ elif i==3:
+ pvalidation_state = 'Expired'
+ pCampaign = 0
+ pMeeting = 0
+ pSaleOpportunity = 0
+ pSupportRequest = 1
+ punassigned = 0
+ ptotal = 1
+ elif i==4:
+ pvalidation_state = 'New'
+ pCampaign = 1
+ pMeeting = 0
+ pSaleOpportunity = 3
+ pSupportRequest = 0
+ punassigned = 1
+ ptotal = 5
+ elif i==5:
+ pvalidation_state = 'Responded'
+ pCampaign = 2
+ pMeeting = 0
+ pSaleOpportunity = 0
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 2
+ self.checkLineProperties(data_line_list[i],
+ validation_state = pvalidation_state,
+ Campaign = pCampaign,
+ Meeting = pMeeting,
+ SaleOpportunity = pSaleOpportunity,
+ SupportRequest = pSupportRequest,
+ unassigned = punassigned,
+ total = ptotal)
+ # Stat Line
+ stat_line = line_list[-1]
+ self.failUnless(stat_line.isStatLine())
+ self.assertEquals('Total', stat_line.getColumnProperty('validation_state'))
+ self.assertEquals(4, stat_line.getColumnProperty('Campaign'))
+ self.assertEquals(1, stat_line.getColumnProperty('Meeting'))
+ self.assertEquals(4, stat_line.getColumnProperty('SaleOpportunity'))
+ self.assertEquals(1, stat_line.getColumnProperty('SupportRequest'))
+ self.assertEquals(1, stat_line.getColumnProperty('unassigned'))
+ self.assertEquals(11, stat_line.getColumnProperty('total'))
+
+ #Incoming
+ line_list = self.getListBoxLineList(report_section_list[1])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 4 states
+ self.assertEquals(4, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['validation_state','Campaign', 'Meeting',
+ 'SaleOpportunity','SupportRequest', 'unassigned','total'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ pvalidation_state = 'Delivered'
+ pCampaign = 0
+ pMeeting = 1
+ pSaleOpportunity = 0
+ pSupportRequest = 0
+ punassigned = 1
+ ptotal = 2
+ elif i==1:
+ pvalidation_state = 'Outgoing'
+ pCampaign = 0
+ pMeeting = 0
+ pSaleOpportunity = 0
+ pSupportRequest = 1
+ punassigned = 0
+ ptotal = 1
+ elif i==2:
+ pvalidation_state = 'Pending'
+ pCampaign = 0
+ pMeeting = 0
+ pSaleOpportunity = 1
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 1
+ elif i==3:
+ pvalidation_state = 'Posted'
+ pCampaign = 1
+ pMeeting = 0
+ pSaleOpportunity = 0
+ pSupportRequest = 0
+ punassigned = 0
+ ptotal = 1
+ self.checkLineProperties(data_line_list[i],
+ validation_state = pvalidation_state,
+ Campaign = pCampaign,
+ Meeting = pMeeting,
+ SaleOpportunity = pSaleOpportunity,
+ SupportRequest = pSupportRequest,
+ unassigned = punassigned,
+ total = ptotal)
+ # Stat Line
+ stat_line = line_list[-1]
+ self.failUnless(stat_line.isStatLine())
+ self.assertEquals('Total', stat_line.getColumnProperty('validation_state'))
+ self.assertEquals(1, stat_line.getColumnProperty('Campaign'))
+ self.assertEquals(1, stat_line.getColumnProperty('Meeting'))
+ self.assertEquals(1, stat_line.getColumnProperty('SaleOpportunity'))
+ self.assertEquals(1, stat_line.getColumnProperty('SupportRequest'))
+ self.assertEquals(1, stat_line.getColumnProperty('unassigned'))
+ self.assertEquals(5, stat_line.getColumnProperty('total'))
+
+ def testEventDetailedReport(self):
+ # Event Detailed Report report.
+
+ # creating one ticket of every type
+ sale_opportunity = self._makeOneTicket(
+ portal_type='Sale Opportunity',
+ title='Sale Opportunity One',
+ simulation_state='contacted',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ start_date=DateTime(2007, 2, 2),
+ stop_date=DateTime(2007, 11, 30))
+ campaign = self._makeOneTicket(
+ portal_type='Campaign',
+ title='Campaign One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+ meeting = self._makeOneTicket(
+ portal_type='Meeting',
+ title='Meeting One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_1,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+ support_request = self._makeOneTicket(
+ portal_type='Support Request',
+ title='Support Request One',
+ simulation_state='validated',
+ source_section_value=self.organisation_module.My_organisation,
+ destination_section_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 1, 2),
+ stop_date=DateTime(2007, 12, 31))
+
+ # creating events in every incoming-outgoing state related with tickets
+ event1 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 1',
+ simulation_state='acknowledged',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event2 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 2',
+ simulation_state='assigned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ event3 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Event 3',
+ simulation_state='cancelled',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=meeting.getRelativeUrl())
+ event4 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Event 4',
+ simulation_state='expired',
+ destination_value=self.organisation_module.My_organisation,
+ source_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 7, 1, 1),
+ follow_up=support_request.getRelativeUrl())
+ event5 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 5',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event6 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 6',
+ simulation_state='responded',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ event7 = self._makeOneEvent(
+ portal_type='Mail Message',
+ title='Event 7',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=meeting.getRelativeUrl())
+ event8 = self._makeOneEvent(
+ portal_type='Phone Call',
+ title='Event 8',
+ simulation_state='planned',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=support_request.getRelativeUrl())
+ event9 = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event 9',
+ simulation_state='ordered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event10 = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event 10',
+ simulation_state='started',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ # creating free event for unassigned
+ free_event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 1',
+ simulation_state='delivered',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ free_event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Free 2',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 2, 1, 1))
+ # creating events in every non incoming-outgoing state related with tickets
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event deleted 1',
+ simulation_state='draft',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event deleted 2',
+ simulation_state='deleted',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ follow_up=campaign.getRelativeUrl())
+ # creating events in incoming-outgoing state related with tickets
+ # by causality with one related event
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event causality 1',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_1,
+ start_date=DateTime(2007, 2, 2, 1, 1),
+ causality=event9.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event causality 2',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_2,
+ start_date=DateTime(2007, 2, 1, 1, 1),
+ causality=event10.getRelativeUrl())
+ # creating events related with same ticket by follow-up and causality
+ # Only must count one time (follow-up)
+ event = self._makeOneEvent(
+ portal_type='Fax Message',
+ title='Event both 1',
+ simulation_state='new',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ causality=event5.getRelativeUrl(),
+ follow_up=sale_opportunity.getRelativeUrl())
+ event = self._makeOneEvent(
+ portal_type='Letter',
+ title='Event both 2',
+ simulation_state='responded',
+ source_value=self.organisation_module.My_organisation,
+ destination_value=self.person_module.Person_3,
+ start_date=DateTime(2007, 2, 3, 1, 1),
+ causality=event6.getRelativeUrl(),
+ follow_up=campaign.getRelativeUrl())
+
+ get_transaction().commit()
+ self.tic()
+ # set request variables and render
+ request_form = self.portal.REQUEST.other
+ request_form['from_date'] = DateTime(2007, 1, 1)
+
+ report_section_list = self.getReportSectionList(
+ 'EventModule_viewEventDetailedReport')
+ #Obtain 1 listbox with outgoing and incoming events
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ # we have 5 lines
+ self.assertEquals(5, len(data_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list,
+ ['ticket_title','ticket_type', 'resource',
+ 'delivered', 'ordered', 'acknowledged', 'assigned',
+ 'started', 'draft', 'planned', 'cancelled', 'new',
+ 'expired', 'responded','total'])
+ for i in range(len(data_line_list)):
+ if i==0:
+ pticket_title = 'Campaign One'
+ pticket_type = 'Campaign'
+ pdelivered = 0
+ pordered = 0
+ packnowledged = 0
+ passigned = 1
+ pstarted = 1
+ pdraft = 0
+ pplanned = 0
+ pcancelled = 0
+ pnew = 1
+ pexpired = 0
+ presponded = 2
+ ptotal = 5
+ elif i==1:
+ pticket_title = 'Meeting One'
+ pticket_type = 'Meeting'
+ pdelivered = 1
+ pordered = 0
+ packnowledged = 0
+ passigned = 0
+ pstarted = 0
+ pdraft = 0
+ pplanned = 0
+ pcancelled = 1
+ pnew = 0
+ pexpired = 0
+ presponded = 0
+ ptotal = 2
+ elif i==2:
+ pticket_title = 'Sale Opportunity One'
+ pticket_type = 'Sale Opportunity'
+ pdelivered = 0
+ pordered = 1
+ packnowledged = 1
+ passigned = 0
+ pstarted = 0
+ pdraft = 1
+ pplanned = 0
+ pcancelled = 0
+ pnew = 3
+ pexpired = 0
+ presponded = 0
+ ptotal = 6
+ elif i==3:
+ pticket_title = 'Support Request One'
+ pticket_type = 'Support Request'
+ pdelivered = 0
+ pordered = 0
+ packnowledged = 0
+ passigned = 0
+ pstarted = 0
+ pdraft = 0
+ pplanned = 1
+ pcancelled = 0
+ pnew = 0
+ pexpired = 1
+ presponded = 0
+ ptotal = 2
+ elif i==4:
+ pticket_title = ''
+ pticket_type = 'Unassigned'
+ pdelivered = 1
+ pordered = 0
+ packnowledged = 0
+ passigned = 0
+ pstarted = 0
+ pdraft = 0
+ pplanned = 0
+ pcancelled = 0
+ pnew = 1
+ pexpired = 0
+ presponded = 0
+ ptotal = 2
+ self.checkLineProperties(data_line_list[i],
+ ticket_title = pticket_title,
+ ticket_type = pticket_type,
+ delivered = pdelivered,
+ ordered = pordered,
+ acknowledged = packnowledged,
+ assigned = passigned,
+ started = pstarted,
+ draft = pdraft,
+ planned = pplanned,
+ cancelled = pcancelled,
+ new = pnew,
+ expired = pexpired,
+ responded = presponded,
+ total = ptotal)
+ # Stat Line
+ stat_line = line_list[-1]
+ self.failUnless(stat_line.isStatLine())
+ self.assertEquals('Total', stat_line.getColumnProperty('ticket_title'))
+ self.assertEquals(2, stat_line.getColumnProperty('delivered'))
+ self.assertEquals(1, stat_line.getColumnProperty('ordered'))
+ self.assertEquals(1, stat_line.getColumnProperty('acknowledged'))
+ self.assertEquals(1, stat_line.getColumnProperty('assigned'))
+ self.assertEquals(1, stat_line.getColumnProperty('started'))
+ self.assertEquals(1, stat_line.getColumnProperty('draft'))
+ self.assertEquals(1, stat_line.getColumnProperty('planned'))
+ self.assertEquals(1, stat_line.getColumnProperty('cancelled'))
+ self.assertEquals(5, stat_line.getColumnProperty('new'))
+ self.assertEquals(1, stat_line.getColumnProperty('expired'))
+ self.assertEquals(2, stat_line.getColumnProperty('responded'))
+ self.assertEquals(17, stat_line.getColumnProperty('total'))
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestCrmReports))
+ return suite
+
More information about the Erp5-report
mailing list