############################################################################# # # Copyright 2007 Nexedi SA Contributors. All Rights Reserved. # Thierry Brettnacher <tb@nexedi.com> # Daniel Feliubadalo <daniel@sip2000.com> # Jerome Perrin <jerome@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 import transaction from DateTime import DateTime from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5ReportTestCase from Products.ERP5Type.tests.utils import reindex from AccessControl.SecurityManagement import newSecurityManager class CrmTestCase(ERP5ReportTestCase): """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) # not all states are implemented here for now. if portal_type == 'Sale Opportunity': # Sale Opportunity have a different workflow. if simulation_state in ('contacted', 'offered',): tk.validate() if simulation_state == 'offered': tk.offer() else: if simulation_state == 'validated': tk.validate() # sanity check self.assertEquals(simulation_state, tk.getSimulationState()) 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()) self._doWorkflowAction(ev, 'acknowledge_action') 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() # sanity check self.assertEquals(simulation_state, ev.getSimulationState()) 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 afterSetUp(self): """Setup the fixture. """ 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') 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') 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') 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') 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') 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') # 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 transaction.commit() self.tic() def beforeTearDown(self): """Remove all documents. """ transaction.abort() for module in (self.campaign_module, self.meeting_module, self.sale_opportunity_module, self.support_request_module, self.organisation_module, self.person_module, self.event_module): module.manage_delObjects(list(module.objectIds())) self.portal_categories['group'].manage_delObjects((['demo_group',])) transaction.commit() self.tic() def getBusinessTemplateList(self): """Returns list of BT to be installed.""" return ('erp5_core_proxy_field_legacy', '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" 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()) 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( self.portal.campaign_module, '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()) 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( self.portal.campaign_module, '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()) 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( self.portal.meeting_module, '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()) 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( self.portal.meeting_module, '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()) 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( self.portal.support_request_module, '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()) 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( self.portal.support_request_module, '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()) 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( self.portal.sale_opportunity_module, '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 = 'Prospect 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()) 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( self.portal.sale_opportunity_module, '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()) 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( self.portal.event_module, '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()) 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( self.portal.event_module, '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