-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy patheg046_multiple_delivery_service.rb
More file actions
192 lines (166 loc) · 7.97 KB
/
eg046_multiple_delivery_service.rb
File metadata and controls
192 lines (166 loc) · 7.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# frozen_string_literal: true
class ESign::Eg046MultipleDeliveryService
attr_reader :args
include ApiCreator
def initialize(args)
@args = args
end
def worker
# Create the envelope request object
envelope_definition = make_envelope(args[:envelope_args])
# Create and send the envelope
# Call Envelopes::create API method
# Exceptions will be caught by the calling function
envelope_api = create_envelope_api(args)
#ds-snippet-start:eSign46Step3
results, _status, headers = envelope_api.create_envelope_with_http_info args[:account_id], envelope_definition
remaining = headers['X-RateLimit-Remaining']
reset = headers['X-RateLimit-Reset']
if remaining && reset
reset_date = Time.at(reset.to_i).utc
puts "API calls remaining: #{remaining}"
puts "Next Reset: #{reset_date}"
end
envelope_id = results.envelope_id
#ds-snippet-end:eSign46Step3
{ 'envelope_id' => envelope_id }
end
private
#ds-snippet-start:eSign46Step2
def make_envelope(envelope_args)
# document 1 (HTML) has tag **signature_1**
# document 2 (DOCX) has tag /sn1/
# document 3 (PDF) has tag /sn1/
#
# The envelope has two recipients:
# recipient 1 - signer
# recipient 2 - cc
# The envelope will be sent first to the signer via SMS
# After it is signed, a copy is sent to the cc person via SMS
# Create the envelope definition
envelope_definition = DocuSign_eSign::EnvelopeDefinition.new
envelope_definition.email_subject = 'Please sign this document set'
# Add the documents
doc1_b64 = Base64.encode64(create_document1(envelope_args))
# Read files 2 and 3 from a local directory
# The reads could raise an exception if the file is not available!
doc_docx = Rails.application.config.doc_docx
doc2_b64 = Base64.encode64(File.binread(File.join('data', doc_docx)))
doc_pdf = Rails.application.config.doc_pdf
doc3_b64 = Base64.encode64(File.binread(File.join('data', doc_pdf)))
# Create the document models
document1 = DocuSign_eSign::Document.new(
# Create the Docusign document object
documentBase64: doc1_b64,
name: 'Order acknowledgement', # Can be different from actual file name
fileExtension: 'html', # Many different document types are accepted
documentId: '1' # A label used to reference the doc
)
document2 = DocuSign_eSign::Document.new(
# Create the Docusign document object
documentBase64: doc2_b64,
name: 'Battle Plan', # Can be different from actual file name
fileExtension: 'docx', # Many different document types are accepted
documentId: '2' # A label used to reference the do
)
document3 = DocuSign_eSign::Document.new(
# Create the Docusign document object
documentBase64: doc3_b64,
name: 'Lorem Ipsum', # Can be different from actual file name
fileExtension: 'pdf', # Many different document types are accepted
documentId: '3' # A label used to reference the doc
)
# The order in the docs array determines the order in the envelope
envelope_definition.documents = [document1, document2, document3]
signer_phone_number = DocuSign_eSign::RecipientPhoneNumber.new
signer_phone_number.country_code = envelope_args[:country_code]
signer_phone_number.number = envelope_args[:phone_number]
signer_additional_notification = DocuSign_eSign::RecipientAdditionalNotification.new
signer_additional_notification.phone_number = signer_phone_number
signer_additional_notification.secondary_delivery_method = envelope_args[:delivery_method]
# Create the signer recipient model
signer1 = DocuSign_eSign::Signer.new
signer1.name = envelope_args[:signer_name]
signer1.email = envelope_args[:signer_email]
signer1.recipient_id = '1'
signer1.routing_order = '1'
signer1.delivery_method = 'Email'
signer1.additional_notifications = [signer_additional_notification]
## routingOrder (lower means earlier) determines the order of deliveries
# to the recipients. Parallel routing order is supported by using the
# same integer as the order for two or more recipients
cc_phone_number = DocuSign_eSign::RecipientPhoneNumber.new
cc_phone_number.country_code = envelope_args[:cc_country_code]
cc_phone_number.number = envelope_args[:cc_phone_number]
cc_additional_notification = DocuSign_eSign::RecipientAdditionalNotification.new
cc_additional_notification.phone_number = cc_phone_number
cc_additional_notification.secondary_delivery_method = envelope_args[:delivery_method]
# Create a cc recipient to receive a copy of the documents
cc1 = DocuSign_eSign::CarbonCopy.new
cc1.name = envelope_args[:cc_name]
cc1.email = envelope_args[:cc_email]
cc1.routing_order = '2'
cc1.recipient_id = '2'
cc1.delivery_method = 'Email'
cc1.additional_notifications = [cc_additional_notification]
# Create signHere fields (also known as tabs) on the documents
# We're using anchor (autoPlace) positioning
#
# The Docusign platform searches throughout your envelope's documents for matching
# anchor strings. So the sign_here_2 tab will be used in both document 2 and 3
# since they use the same anchor string for their "signer 1" tabs.
sign_here1 = DocuSign_eSign::SignHere.new(
anchorString: '**signature_1**',
anchorYOffset: '10',
anchorUnits: 'pixels',
anchorXOffset: '20'
)
sign_here2 = DocuSign_eSign::SignHere.new(
anchorString: '/sn1/',
anchorYOffset: '10',
anchorUnits: 'pixels',
anchorXOffset: '20'
)
# Add the tabs model (including the sign_here tabs) to the signer
# The Tabs object takes arrays of the different field/tab types
signer1_tabs = DocuSign_eSign::Tabs.new({
signHereTabs: [sign_here1, sign_here2]
})
signer1.tabs = signer1_tabs
# Add the recipients to the envelope object
recipients = DocuSign_eSign::Recipients.new(
signers: [signer1],
carbonCopies: [cc1]
)
# Request that the envelope be sent by setting status to "sent".
# To request that the envelope be created as a draft, set status to "created"
envelope_definition.recipients = recipients
envelope_definition.status = envelope_args[:status]
envelope_definition
end
def create_document1(args)
"
<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\">
</head>
<body style=\"font-family:sans-serif;margin-left:2em;\">
<h1 style=\"font-family: 'Trebuchet MS', Helvetica, sans-serif;
color: darkblue;margin-bottom: 0;\">World Wide Corp</h1>
<h2 style=\"font-family: 'Trebuchet MS', Helvetica, sans-serif;
margin-top: 0px;margin-bottom: 3.5em;font-size: 1em;
color: darkblue;\">Order Processing Division</h2>
<h4>Ordered by #{args[:signer_name]}</h4>
<p style=\"margin-top:0em; margin-bottom:0em;\">Phone number: #{args[:phone_number]}</p>
<p style=\"margin-top:0em; margin-bottom:0em;\">Copy to: #{args[:cc_name]}, #{args[:cc_phone_number]}</p>
<p style=\"margin-top:3em;\">
Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie. Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée. Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice. Donut jujubes oat cake jelly-o. Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake.
</p>
<!-- Note the anchor tag for the signature field is in white. -->
<h3 style=\"margin-top:3em;\">Agreed: <span style=\"color:white;\">**signature_1**/</span></h3>
</body>
</html>"
end
#ds-snippet-end:eSign46Step2
end