def run(self):
        # try:
        self.show_text('Connecting to Inteum... ')
        inteum = Inteum(INTEUM_DSN)
        self.show_text('OK\n')

        self.show_text('Loading technologies... ')
        technologies = inteum.get_technologies()
        self.show_text('%s\n' % len(technologies))

        self.show_text('Loading patents... ')
        patents = inteum.get_patents()
        self.show_text('%s\n' % len(patents))

        self.show_text('Loading patentTypes... ')
        patentTypes = inteum.get_patentTypes()
        self.show_text('%s\n' % len(patentTypes))

        self.show_text('Loading lawFirms... ')
        lawFirms = inteum.get_lawFirms()
        self.show_text('%s\n' % len(lawFirms))

        self.show_text('Loading countries... ')
        countries = inteum.get_countries()
        self.show_text('%s\n' % len(countries))

        self.show_text('Loading expenses from spreadsheet... ')
        qbr = self.module(technologies, patents, patentTypes, lawFirms, countries)
        lawFirmExpenses = qbr.load_expenses(self.filePath)
        self.show_text('%s\n' % len(lawFirmExpenses))

        self.show_text('Connecting to QuickBooks... ')
        qb = QuickBooks(applicationName=QUICKBOOKS_APPLICATION_NAME)
        self.show_text('OK\n')

        self.show_text('Updating vendors in QuickBooks using lawFirms from Inteum...\n')
        qb.synchronize(lawFirms, 'Vendor', dict(
            equal=qbr.equal_lawFirm,
            parse_result=qbr.parse_vendor,
            update_result=qbr.format_vendor,
            format_result=qbr.format_vendor,
            # expand_results=
            # collapse_packs=
            prompt_update=self.prompt_update,
            prompt_save=self.prompt_save,
            show_parse_error=self.show_error,
            show_format_error=self.show_error,
            summarize_candidatePacks=self.summarize_candidatePacks,
            summarize_mismatches=self.summarize_mismatches,
            summarize_newPacks=self.summarize_newPacks,
        ))

        self.show_text('Updating customers in QuickBooks using technologies from Inteum...\n')
        qb.synchronize(technologies, 'Customer', dict(
            equal=qbr.equal_technology,
            parse_result=qbr.parse_customer,
            update_result=qbr.format_customer,
            format_result=qbr.format_customer,
            # expand_results=
            # collapse_packs=
            prompt_update=self.prompt_update,
            prompt_save=self.prompt_save,
            show_parse_error=self.show_error,
            show_format_error=self.show_error,
            summarize_candidatePacks=self.summarize_candidatePacks,
            summarize_mismatches=self.summarize_mismatches,
            summarize_newPacks=self.summarize_newPacks,
        ))

        self.show_text('Updating jobs in QuickBooks using patents from Inteum...\n')
        qb.synchronize(patents, 'Customer', dict(
            equal=qbr.equal_patent,
            parse_result=qbr.parse_job,
            update_result=qbr.format_job,
            format_result=qbr.format_job,
            # expand_results=
            # collapse_packs=
            prompt_update=self.prompt_update,
            prompt_save=self.prompt_save,
            show_parse_error=self.show_error,
            show_format_error=self.show_error,
            summarize_candidatePacks=self.summarize_candidatePacks,
            summarize_mismatches=self.summarize_mismatches,
            summarize_newPacks=self.summarize_newPacks,
        ))

        self.show_text('Updating expense accounts in QuickBooks...\n')
        qb.synchronize([{'name': '6100 - Patent Related Expenses'}], 'Account', dict(
            equal=lambda account1, account2: account1['name'].lower() == account2['name'].lower(),
            parse_result=lambda result: {'name': result['FullName']},
            # update_result=,
            format_result=lambda account, show_format_error: OrderedDict([('Name', account['name']), ('AccountType', 'Expense')]),
            # expand_results=,
            # collapse_packs=,
            # prompt_update=,
            prompt_save=self.prompt_save,
            show_parse_error=self.show_error,
            show_format_error=self.show_error,
            summarize_candidatePacks=self.summarize_candidatePacks,
            summarize_mismatches=self.summarize_mismatches,
            summarize_newPacks=self.summarize_newPacks,
        ))

        self.show_text('Updating expenses in QuickBooks using expenses from spreadsheet...\n')
        qb.synchronize(lawFirmExpenses, 'Bill', dict(
            equal=qbr.equal_expense,
            parse_result=qbr.parse_bill,
            update_result=qbr.update_bill,
            format_result=qbr.format_bill,
            expand_results=qbr.expand_bills,
            collapse_packs=qbr.collapse_expenses,
            prompt_update=self.prompt_update,
            prompt_save=self.prompt_save,
            show_parse_error=self.show_error,
            show_format_error=self.show_error,
            summarize_candidatePacks=self.summarize_candidatePacks,
            summarize_mismatches=self.summarize_mismatches,
            summarize_newPacks=self.summarize_newPacks,
        ), {'IncludeLineItems': 1})