/**
  * Send envelope for all signatures for application
  *
  * @param ClientAccount $account
  * @return bool
  * @throws \RuntimeException
  */
 public function sendEnvelopeForApplication(ClientAccount $account)
 {
     $signatures = $this->signatureManager->findSignaturesByAccountConsolidatorId($account->getId());
     $usedTemplates = array();
     $compositeTemplates = array();
     foreach ($signatures as $signature) {
         $source = $this->signatureManager->getSourceObject($signature);
         $templateId = $this->getTemplateForSignableObject($source);
         if (in_array($templateId, $usedTemplates)) {
             continue;
         }
         $usedTemplates[] = $templateId;
         $recipients = $this->getRecipients($source);
         $recipientParams = array();
         foreach ($recipients as $key => $recipient) {
             $recipientParams[] = array('email' => $recipient->getEmail(), 'name' => $recipient->getName(), 'clientUserId' => $recipient->getClientUserId(), 'recipientId' => $key + 1, 'roleName' => $recipient->getRoleName(), 'type' => $recipient->getType(), 'tabs' => $recipient->getTabs()->toArray());
         }
         $serverTemplates = array(array('sequence' => 1, 'templateId' => $templateId));
         $inlineTemplates = array(array('sequence' => 2, 'recipients' => array('signers' => $recipientParams)));
         $compositeTemplates[] = array('serverTemplates' => $serverTemplates, 'inlineTemplates' => $inlineTemplates);
     }
     if (count($compositeTemplates)) {
         $options = array('compositeTemplates' => $compositeTemplates, 'enableWetSign' => false);
         $envelope = new Envelope();
         $envelope->setEmailBlurb('Sign all documents');
         $envelope->setEmailSubject('Sign all documents');
         //$envelope->setRecipients($recipients);
         $envelope->setStatus(Envelope::STATUS_SENT);
         try {
             $response = $this->docusignApi->sendEnvelope($envelope, $options);
         } catch (\Exception $e) {
             throw new \RuntimeException($e->getMessage(), $e->getCode(), $e);
         }
         foreach ($signatures as $signature) {
             $signature->setDocusignEnvelopeId($response->envelopeId);
             $signature->setStatus($response->status);
             $this->signatureManager->saveDocumentSignature($signature);
         }
         return true;
     }
     return false;
 }
Example #2
0
 /**
  * Get envelope documents and save them for signatures
  *
  * @param string $envelopeId
  * @param DocumentSignature[] $signatures  must be sorted in the order of creation
  * @throws \RuntimeException
  */
 private function getDocusignDocumentByEnvelopeIdAndSignatures($envelopeId, array $signatures)
 {
     $documents = $this->api->getEnvelopeDocuments($envelopeId);
     if ($documents && count($documents->envelopeDocuments)) {
         foreach ($signatures as $index => $signature) {
             if ($signature->getDocument() && $signature->getDocument()->getFilename()) {
                 continue;
             }
             if (!isset($documents->envelopeDocuments[$index])) {
                 throw new \RuntimeException(sprintf('Document for signature with index: %s does not exist.', $index));
             }
             $documentInfo = $documents->envelopeDocuments[$index];
             $documentBytes = $this->api->getEnvelopeDocument($envelopeId, $documentInfo->documentId);
             $source = $this->signatureManager->getSourceObject($signature);
             $clientAccount = $source->getClientAccount();
             $client = $clientAccount->getClient();
             $filename = $client->getFirstName() . '_' . $client->getMiddleName() . '_' . $client->getLastName() . '_Account' . $clientAccount->getId() . '_' . $documentInfo->name;
             $path = $this->container->getParameter('uploads_dir') . '/tmp';
             if (!is_dir($path)) {
                 mkdir($path);
             }
             $path .= '/' . $filename;
             $fp = fopen($path, 'w+');
             fwrite($fp, $documentBytes);
             fclose($fp);
             $file = new File($path);
             $document = $signature->getDocument();
             $document->setOwner($client->getRia());
             $document->setFile($file);
             $document->setOriginalName($documentInfo->name);
             $document->setType(Document::TYPE_APPLICATION);
             $document->upload();
             if (!$client->getUserDocuments()->contains($document)) {
                 $client->addUserDocument($document);
             }
             $this->em->persist($document);
         }
         $this->em->persist($client);
         $this->em->flush();
         //$this->createWorkflow($signature, $document);
     }
 }
 /**
  * Get source object of document signature
  *
  * @param DocumentSignature $signature
  * @return \Wealthbot\SignatureBundle\Model\SignableInterface
  */
 public function getDocumentSignatureSource(DocumentSignature $signature)
 {
     return $this->manager->getSourceObject($signature);
 }