88import com .docusign .esign .model .*;
99
1010import java .io .IOException ;
11+ import java .util .Arrays ;
1112import java .util .Collections ;
1213
1314public final class ResponsiveSigningService {
1415 //ds-snippet-start:eSign38Step2
16+ private static final String TRUE = "true" ;
17+ private static final String FALSE = "false" ;
18+ private static final int L1_PRICE = 5 ;
19+ private static final int L2_PRICE = 150 ;
20+ private static final int ANCHOR_OFFSET_Y = 10 ;
21+ private static final int ANCHOR_OFFSET_X = 20 ;
22+ private static final String DEFAULT_FONT = "helvetica" ;
23+ private static final String DEFAULT_FONT_SIZE = "size11" ;
24+ private static final String ANCHOR_UNITS = "pixels" ;
1525 private static final String HTML_DOCUMENT_FILE_NAME = "templates/order-form.ftl" ;
1626 public static EnvelopeDefinition makeEnvelope (
1727 String signerEmail ,
@@ -22,9 +32,9 @@ public static EnvelopeDefinition makeEnvelope(
2232 WorkArguments args
2333 ) throws IOException {
2434 String htmlDoc = EnvelopeHelpers .createHtmlFromTemplateFile (HTML_DOCUMENT_FILE_NAME , "args" , args );
25- htmlDoc = htmlDoc . replace ( "/sn1/" , "<ds-signature data-ds-role= \" Signer \" />" )
26- .replace ("/l1q/" , " <input data-ds-type=\" number\" />" )
27- .replace ("/l2q/" , " <input data-ds-type=\" number\" />" );;
35+ htmlDoc = htmlDoc
36+ .replace ("/l1q/" , " <input data-ds-type=\" number\" name= \" l1q \" />" )
37+ .replace ("/l2q/" , " <input data-ds-type=\" number\" name= \" l2q \" />" );;
2838
2939 Signer signer = new Signer ()
3040 .email (signerEmail )
@@ -47,12 +57,53 @@ public static EnvelopeDefinition makeEnvelope(
4757 .name ("Lorem Ipsum" )
4858 .documentId ("1" )
4959 .htmlDefinition (new DocumentHtmlDefinition ().source (htmlDoc ))));
60+ signer .setTabs (createTabs ());
5061 envelope .setRecipients (EnvelopeHelpers .createRecipients (signer , cc ));
5162 envelope .setStatus (EnvelopeHelpers .ENVELOPE_STATUS_SENT );
5263
5364 return envelope ;
5465 }
5566
67+ private static Tabs createTabs () {
68+ FormulaTab formulaForFirstNumber = createFormulaTab ("/l1e/" , "l1e" , L1_PRICE , "l1q" );
69+ FormulaTab formulaForSecondNumber = createFormulaTab ("/l2e/" , "l2e" , L2_PRICE , "l2q" );
70+ FormulaTab finalFormula = new FormulaTab ()
71+ .font (DEFAULT_FONT )
72+ .bold (TRUE )
73+ .fontSize (DEFAULT_FONT_SIZE )
74+ .anchorString ("/l3t/" )
75+ .anchorYOffset ("-8" )
76+ .anchorUnits (ANCHOR_UNITS )
77+ .anchorXOffset ("105" )
78+ .tabLabel ("l3t" )
79+ .formula ("[l1e] + [l2e]" )
80+ .roundDecimalPlaces ("0" )
81+ .required (TRUE )
82+ .locked (TRUE )
83+ .disableAutoSize (FALSE );
84+
85+ Tabs signerTabs = EnvelopeHelpers .createSingleSignerTab ("/sn1/" , ANCHOR_OFFSET_Y , ANCHOR_OFFSET_X );
86+ signerTabs .formulaTabs (Arrays .asList (formulaForFirstNumber , formulaForSecondNumber , finalFormula ));
87+
88+ return signerTabs ;
89+ }
90+
91+ private static FormulaTab createFormulaTab (String anchor , String label , int price , String numerical ) {
92+ return new FormulaTab ()
93+ .font (DEFAULT_FONT )
94+ .fontSize (DEFAULT_FONT_SIZE )
95+ .anchorString (anchor )
96+ .anchorYOffset ("-8" )
97+ .anchorUnits (ANCHOR_UNITS )
98+ .anchorXOffset ("105" )
99+ .tabLabel (label )
100+ .formula (String .format ("[%s] * {%d}" , numerical , price ))
101+ .roundDecimalPlaces ("0" )
102+ .required (TRUE )
103+ .locked (TRUE )
104+ .disableAutoSize (FALSE );
105+ }
106+
56107 public static ViewUrl responsiveSigning (
57108 EnvelopesApi envelopesApi ,
58109 String accountId ,
0 commit comments