Skip to main content

I have tried to create a signer and and approver order, but it always takes the second email.



Referring to the attached code below:





  • When there is a order 1 & order 2, no emails send out


  • When there is a order 2 but no order 1 set, then the approver gets the email.


  • When there is a order 1 but no order 2 set, then the approve


  • When there is no order defined, the approver email sends.




I should note, that each email does work when pushed alone. We are using the python SDK



“signers”:


{


“email”: signer_email,


“role”: “signer”,


“embed_url_external_user_id”: signer_email,


“password”: “xxxxx”,


“order”: 1


},


{


“email”: approver_email,


“role”: “approver”,


“password”: “xxxxx”,


“order”: 2


}

Hi @Steonard, welcome to the forum!



Not considering the order, I think that is the expected behavior. The approval role is meant for approving the signature request, so it is triggered before any signer.



Typically I only apply the order to the signer roles. Both the approver and the final copy reader order are pre-set, the approver goes before any signer and the final copy reader after all signers. Also note that a signer is anyone that has an input to the document, and may not include a signature.



I confess I never tried to set an order to the approver or the final copy reader, and there might be some unexpected interaction there. Some testing is required.



Consider this sample code using the Next Gen Python SDK:



def sign_contract_step(

client: Client,

document_id: str,

destination_folder_id: str,

institution_email: str,

student_email: str,

dean_email: str,

legal_email: str,

) -> SignRequest:

"""Sign contract"""



# Sign request params

source_file = FileBase(id=document_id, type=FileBaseTypeField.FILE)

destination_folder = FolderMini(

id=destination_folder_id, type=FolderBaseTypeField.FOLDER

)



# signers

institution = SignRequestCreateSigner(

email=institution_email,

role=SignRequestCreateSignerRoleField.SIGNER,

order=1,

)



student = SignRequestCreateSigner(

email=student_email,

role=SignRequestCreateSignerRoleField.SIGNER,

order=2,

)



dean = SignRequestCreateSigner(

email=dean_email,

role=SignRequestCreateSignerRoleField.APPROVER,

)



legal = SignRequestCreateSigner(

email=legal_email,

role=SignRequestCreateSignerRoleField.FINAL_COPY_READER,

)



# create sign request

sign_request = client.sign_requests.create_sign_request(

signers=[institution, student, dean, legal],

parent_folder=destination_folder,

source_files=[source_file],

is_document_preparation_needed=True,

)



return sign_request



And its usage in a main script:



def main():

...



# Multiple signers and steps

sign_contract_multi_step = sign_contract_step(

client,

CONTRACT,

SIGN_DOCS_FOLDER,

institution_email=SIGNER_A,

student_email=SIGNER_B,

dean_email=APPROVER,

legal_email=FINAL_COPY,

)

if sign_contract_multi_step.prepare_url is not None:

open_browser(sign_contract_multi_step.prepare_url)



Notice in the example below that the institution is represented by the blue color in the left, and the student by green on the right, both are signers



Neither the approver nor the final copy reader can have inputs associated with them. If you do this, their roles will be adjusted to signer





The signature process goes like this:





  • First the dean approves the scholarship


  • Next the institution signs the scholarship


  • Next the student signs the scholarship


  • Finally the legal department receives a copy of the signed document.




Let us know if this was of any use.



Also the above example is detailed in one of our blog articles, you can check it out here:







And it is also part of a sign workshop, if you’re interested, with sample code and exercises (look for sign in the readme.md):







Cheers




Ohh I get it. For some reason I thought approver was after the signer. It works as you talked about thanks so much!


You’re very welcome @Steonard



Could you mark. my answer as the solution for others benefit?



Cheers


Reply