/** * 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; }
/** * 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); }