Exemplo n.º 1
0
 def get(self, request, envelope_id):
     envelopes_api = EnvelopesApi(get_api_client())
     envelope = envelopes_api.get_envelope(ACCOUNT_ID, envelope_id)
     envelope.status = 'voided'
     envelope.voided_reason = 'changed my mind'
     envelope.purge_state = None
     envelopes_api.update(ACCOUNT_ID, envelope_id, envelope=envelope)
     SigEnvelope.objects.get(envelope_id=envelope_id).delete()
     return redirect('esign:envelope_list')
Exemplo n.º 2
0
    def worker(cls, args):
        """
        1. Call the envelope update method
        """

        # Create the envelope definition
        env = EnvelopeDefinition(workflow=Workflow(
            workflow_status="in_progress"))

        # Exceptions will be caught by the calling function
        api_client = create_api_client(base_path=args["base_path"],
                                       access_token=args["access_token"])

        # 2. Call Envelopes::update API method
        # Exceptions will be caught by the calling function
        envelopes_api = EnvelopesApi(api_client)
        results = envelopes_api.update(account_id=args["account_id"],
                                       envelope_id=args["envelope_id"],
                                       envelope=env,
                                       resend_envelope=True)

        return {"envelope_id": results.envelope_id}
Exemplo n.º 3
0
def createEnv(repReports=extractReport(),
              template_id="a07ff1a4-d135-459a-ac45-e5b1f3f5e021",
              api_client=dsAuth(),
              template_role_name='Rep',
              template_role_cc='Rep Manager'):
    docusign.configuration.api_client = api_client
    data_labels = {
        "CaseNum_Label":
        ["CNum_1", "CNum_2", "CNum_3", "CNum_4", "CNum_5", "CNum_6"],
        "DateEsc_Label":
        ["Date_1", "Date_2", "Date_3", "Date_4", "Date_5", "Date_6"],
        "Subject_Label": [
            "Subject_1", "Subject_2", "Subject_3", "Subject_4", "Subject_5",
            "Subject_6"
        ],
        "CaseRes_Label": [
            "Resolution_1", "Resolution_2", "Resolution_3", "Resolution_4",
            "Resolution_5", "Resolution_6"
        ],
        "T3": ["T3_1", "T3_2", "T3_3", "T3_4", "T3_5", "T3_6"],
        "Link": ["Link_1", "Link_2", "Link_3", "Link_4", "Link_5", "Link_6"]
    }
    # repEmails = get_emails()
    sentListOut = []
    env_count = 0
    # loop through each rep
    for key, val in repReports.items():
        if key != "Bug Backlog" and val[
                'MgrEmail'] != 'n/a':  # '*****@*****.**':  # and val['Email'].lower() == '*****@*****.**':
            # create an envelope to be signed
            envelope_definition = docusign.EnvelopeDefinition()
            if val['MgrEmail'] == '*****@*****.**' or val['Email'].lower() \
                    in ("*****@*****.**","*****@*****.**","*****@*****.**"):
                envelope_definition.email_subject = 'Tier 3 case escalation feedback - ' \
                                                    'here\'s what happened with your recent previously owned cases'
                envelope_definition.email_blurb = 'Hello ' + key.split(' ')[
                    0] + ', \n\nI\'m sending these out to you tier 3 reps as well now so if another tier 3 or dev ' \
                         'support takes on your cases we can close the loop on these as well. \n\nFeel free to message ' \
                         'me for any suggestions on how to make this program even better. \n\nThanks for reading,' \
                         '\n\nKevin\'s Autofeedbacker bot'
            else:
                envelope_definition.email_subject = 'Tier 3 case escalation feedback - here\'s what happened with ' \
                                                    'your recent escalated cases'
                envelope_definition.email_blurb = 'Hello ' + key.split(' ')[
                    0] + ', \n\nWe\'re starting a new program intended to provide you with a followup on how the cases ' \
                         'you escalated to tier 3 were resolved. The purpose of this is to learn from these cases, ' \
                         'we know you\'re too busy to check up on all of those so we\'re making it easy with these ' \
                         'weekly reports. If you\'re missing any cases we may still be working on them so stay tuned. ' \
                         'Feel free to reach out to the tier 3 rep who closed these cases for more details on what ' \
                         'they did. \n\nFeel free to message Kevin Alber for any suggestions on how to make this ' \
                         'program even better. \n\nThanks for reading,\n\nKevin\'s Autofeedbacker bot'

            # assign template information including ID and role(s)
            envelope_definition.template_id = template_id

            # create manager email notification, need to test

            mgr_emailNotification = docusign.RecipientEmailNotification()
            mgr_emailNotification.email_subject = 'Tier 3 case escalation feedback - here\'s what happened with ' + \
                                                  key.split(' ')[0] + '\'s recent escalated cases'
            mgr_emailNotification.email_body = 'Hello ' + val['MgrEmail'].split('.')[
                0].title() + ', \n\n We\'re starting a new program intended to provide your reps with feedback on cases ' \
                             'that they escalated to tier 3 so they can learn from them and you can better coach them. ' \
                             'Please let me, Kevin Alber, know if you have any feedback about this process. \n\nThanks ' \
                             'for reading,\n\nKevin\'s Autofeedbacker bot'

            # create a template role with a valid template_id and role_name and assign signer info
            t_role = docusign.TemplateRole()
            t_role.role_name = template_role_name
            t_role.name = key
            if test_mode == 1:
                t_role.email = '*****@*****.**'  # for real send
            else:
                t_role.email = val['Email']
                print("Envelope going to rep: " + val['Email'])

            # mgr role on template
            t_role_cc = docusign.TemplateRole()
            t_role_cc.role_name = template_role_cc
            t_role_cc.name = val['MgrEmail'].split('@')[0].replace(
                '.', ' ').title()  # might want to just add this to spreadsheet
            if test_mode == 1 or val[
                    'MgrEmail'] == '*****@*****.**':
                t_role_cc.email = '*****@*****.**'  #
            else:
                t_role_cc.email = val['MgrEmail']
            t_role_cc.email_notification = mgr_emailNotification

            # create a list of template roles and add our newly created role
            # assign template role(s) to the envelope
            envelope_definition.template_roles = [t_role, t_role_cc]

            # send the envelope by setting |status| to "sent". To save as a draft set to "created"
            envelope_definition.status = 'created'

            # notif = Notification()
            # notif.use_account_defaults = "True"

            # envelope_definition.notification = notif
            auth_api = AuthenticationApi()
            envelopes_api = EnvelopesApi()

            # create draft
            try:
                login_info = auth_api.login(
                    api_password='******', include_account_id_guid='true')  ###
                assert login_info is not None
                assert len(login_info.login_accounts) > 0
                login_accounts = login_info.login_accounts
                assert login_accounts[0].account_id is not None

                base_url, _ = login_accounts[0].base_url.split('/v2')
                api_client.host = base_url
                docusign.configuration.api_client = api_client

                envelope_summary = envelopes_api.create_envelope(
                    login_accounts[0].account_id,
                    envelope_definition=envelope_definition)
                assert envelope_summary is not None
                assert envelope_summary.envelope_id is not None
                assert envelope_summary.status == 'created'
                env_count += 1
                # print("Envelope Created Summary: ", end="")
                # pprint(envelope_summary)
            except ApiException as e:
                print("\nException when calling DocuSign API: %s" % e)
                assert e is None  # make the test case fail in case of an API exception

            # get array of tab objects on the current envelope
            tab_array = envelopes_api.get_page_tabs(
                login_accounts[0].account_id, 1, envelope_summary.envelope_id,
                1).text_tabs

            # iterate through each case as row in envelope
            row = 0
            tab_list = []
            for v in val['Cases']:
                if row < 6:
                    label = 'CaseNum_Label'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col1 = docusign.Text()
                    t_col1.tab_label = data_labels[label][row - 1]
                    t_col1.value = str(v['CaseNumber'])
                    t_col1.tab_id = target_tab.tab_id
                    t_col1.documentId = "1"
                    t_col1.recipientId = "1"
                    t_col1.pageNumber = 1
                    tab_list.append(t_col1)
                    # print(str(v['CaseNumber']))
                    sentListOut.append(v['CaseNumber'])

                    label = 'DateEsc_Label'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col2 = docusign.Text()
                    t_col2.tab_label = data_labels[label][row]
                    t_col2.value = v['DateEscalated']
                    t_col2.tab_id = target_tab.tab_id
                    t_col2.documentId = "1"
                    t_col2.recipientId = "1"
                    t_col2.pageNumber = 1
                    tab_list.append(t_col2)

                    # subMaxChar = charLimit(19, 10, v['Subject'])
                    if len(v['Subject']) > 160:
                        extra = '...'
                    else:
                        extra = ''

                    label = 'Subject_Label'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col3 = docusign.Text()
                    t_col3.tab_label = data_labels[label][row]
                    t_col3.disable_auto_size = 'True'
                    t_col3.height = '200'
                    t_col3.value = v['Subject'][:160] + extra
                    t_col3.tab_id = target_tab.tab_id
                    t_col3.documentId = "1"
                    t_col3.recipientId = "1"
                    t_col3.pageNumber = 1
                    tab_list.append(t_col3)

                    if len(v['CaseResolution']) > 184:
                        extra = '...'
                    else:
                        extra = ''

                    label = 'CaseRes_Label'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col4 = docusign.Text()
                    t_col4.tab_label = data_labels[label][row]
                    t_col4.disable_auto_size = 'True'
                    t_col4.height = '200'
                    t_col4.value = v['CaseResolution'][:184] + extra
                    t_col4.tab_id = target_tab.tab_id
                    t_col4.documentId = "1"
                    t_col4.recipientId = "1"
                    t_col4.pageNumber = 1
                    tab_list.append(t_col4)

                    label = 'T3'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col5 = docusign.Text()
                    t_col5.tab_label = data_labels[label][row]
                    t_col5.value = v['T3RepName']
                    t_col5.tab_id = target_tab.tab_id
                    t_col5.documentId = "1"
                    t_col5.recipientId = "1"
                    t_col5.pageNumber = 1
                    tab_list.append(t_col5)

                    label = 'Link'
                    target_tab = next(
                        (x for x in tab_array
                         if x.tab_label == data_labels[label][row]), None)
                    assert target_tab is not None
                    t_col6 = docusign.Text()
                    t_col6.tab_label = "#HREF_" + data_labels[label][row]
                    t_col6.name = v['link']
                    t_col6.value = 'Go to Case'
                    t_col6.tab_id = target_tab.tab_id
                    t_col6.documentId = "1"
                    t_col6.recipientId = "1"
                    t_col6.pageNumber = 1
                    tab_list.append(t_col6)

                    row += 1
                else:
                    print("We're over 6 cases for rep" + val['Email'] +
                          ", dropped case " + str(v['CaseNumber']))

            # now update those tabs using my list of tab definitions, then update status to sent
            tabs = docusign.Tabs()
            tabs.text_tabs = tab_list
            envelopes_api.update_tabs(login_accounts[0].account_id,
                                      envelope_summary.envelope_id,
                                      1,
                                      tabs=tabs)
            envelope_definition.status = 'sent'
            envelope_summary2 = envelopes_api.update(
                login_accounts[0].account_id,
                envelope_summary.envelope_id,
                envelope=envelope_definition)
            if test_mode != 1:
                updateSentList(sentListOut)

            # print("Sent: " +str(key)+ " envId: " + ) # + "EnvelopeSummary: ", end="")
            # pprint(envelope_summary2)
    print("Count: " + str(env_count))