/** * Generate collection of tabs * * @return TabCollection * @throws \RuntimeException * @throws \InvalidArgumentException */ public function generate() { if (!$this->signableObject instanceof Distribution || !$this->signableObject->isOneTime()) { throw new \InvalidArgumentException('Signable object must be one-time distribution.'); } if ($this->signableObject->getTransferMethod() !== Distribution::TRANSFER_METHOD_WIRE_TRANSFER) { throw new \RuntimeException('Invalid transfer method for one-time distribution.'); } $bankInformation = $this->signableObject->getBankInformation(); $clientAccount = $this->signableObject->getClientAccount(); $client = $clientAccount ? $clientAccount->getClient() : null; $companyInformation = $client ? $client->getRiaCompanyInformation() : null; $tabs = array(); $advisorCode = new TextTab(); $advisorCode->setTabLabel('advisor#')->setValue($this->getAdvisorCode($companyInformation)); $tabs[] = $advisorCode; $accountNumber = new TextTab(); $accountNumber->setTabLabel('account#')->setValue($clientAccount ? $clientAccount->getAccountNumber() : ''); $tabs[] = $accountNumber; $bankNameTab = new TextTab(); $bankNameTab->setTabLabel('bank_name')->setValue($bankInformation->getName()); $tabs[] = $bankNameTab; $bankPhoneTab = new TextTab(); $bankPhoneTab->setTabLabel('bank_phone_number')->setValue($bankInformation->getPhoneNumber()); $tabs[] = $bankPhoneTab; return new TabCollection($tabs); }
/** * Generate delivery details section tabs * * @return array */ public function deliveryDetailsSection() { $clientAccount = $this->signableObject->getClientAccount(); $owner = $clientAccount->getPrimaryApplicant(); $tabs = array(); $deliveryDetailsTab = new RadioGroupTab(); $deliveryDetailsTab->setGroupName('delivery_details')->setValue('account_owner')->setSelected(true); $tabs[] = $deliveryDetailsTab; $payeeNameTab = new TextTab(); $payeeNameTab->setTabLabel('delivery_payee_name')->setValue($owner->getFullName()); $tabs[] = $payeeNameTab; $addressTab = new TextTab(); $addressTab->setTabLabel('delivery_address')->setValue($owner->getStreet()); $tabs[] = $addressTab; $cityTab = new TextTab(); $cityTab->setTabLabel('delivery_city')->setValue($owner->getCity()); $tabs[] = $cityTab; $stateTab = new TextTab(); $stateTab->setTabLabel('delivery_state')->setValue($owner->getState()->getName()); $tabs[] = $stateTab; $zipTab = new TextTab(); $zipTab->setTabLabel('delivery_zip_code')->setValue($owner->getZip()); $tabs[] = $zipTab; return $tabs; }
/** * Create tab configuration object * * @return TabsConfigurationInterface * @throws \InvalidArgumentException */ public function create() { $type = $this->signableObject->getDocumentSignatureType(); $account = $this->signableObject->getClientAccount(); $accountType = $account->getSystemType(); switch ($type) { case DocumentSignature::TYPE_OPEN_OR_TRANSFER_ACCOUNT: if ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $configuration = new IraAccountApplication($account); } else { $configuration = new PersonalAccountApplication($account); } break; case DocumentSignature::TYPE_TRANSFER_INFORMATION: $configuration = new AccountTransferForm($account); break; case DocumentSignature::TYPE_AUTO_INVEST_CONTRIBUTION: case DocumentSignature::TYPE_ONE_TIME_CONTRIBUTION: $configuration = new ElectronicFundsTransferForm($this->signableObject); break; case DocumentSignature::TYPE_AUTO_DISTRIBUTION: if ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $configuration = new IraDistributionForm($this->signableObject); } else { $configuration = new ElectronicFundsTransferForm($this->signableObject); } break; case DocumentSignature::TYPE_CHANGE_BENEFICIARY: if (!$this->signableObject instanceof Beneficiary) { throw new \InvalidArgumentException(sprintf('Object must be instance of Beneficiary.')); } $configuration = new BeneficiaryDesignationForm($this->signableObject); break; case DocumentSignature::TYPE_ONE_TIME_DISTRIBUTION: if ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $configuration = new IraDistributionForm($this->signableObject); } else { if (!$this->signableObject instanceof Distribution || !$this->signableObject->isOneTime()) { throw new \InvalidArgumentException(sprintf('Object must be one-time distribution.')); } if (Distribution::TRANSFER_METHOD_RECEIVE_CHECK === $this->signableObject->getTransferMethod()) { $configuration = new CheckRequest($this->signableObject); } elseif (Distribution::TRANSFER_METHOD_WIRE_TRANSFER == $this->signableObject->getTransferMethod()) { $configuration = new WireInstructions($this->signableObject); } else { $configuration = new ElectronicFundsTransferForm($this->signableObject); } } break; default: throw new \InvalidArgumentException(sprintf('Invalid type: %s for signable document.', $type)); break; } return $configuration; }
/** * Generate payment method section tabs * * @return array */ protected function paymentMethodSection() { $clientAccount = $this->signableObject->getClientAccount(); $owner = $clientAccount->getPrimaryApplicant(); $paymentMethod = ''; $transferMethod = $this->signableObject->getTransferMethod(); if ($transferMethod === Distribution::TRANSFER_METHOD_RECEIVE_CHECK) { $paymentMethod = 'send_check'; $sendCheckMethodTab = new RadioGroupTab(); $sendCheckMethodTab->setGroupName('send_check_method')->setValue('us_first_class_mail')->setSelected(true); $tabs[] = $sendCheckMethodTab; $sendCheckTypeTab = new RadioGroupTab(); $sendCheckTypeTab->setGroupName('send_check_type')->setValue('address_of_record')->setSelected(true); $tabs[] = $sendCheckTypeTab; $nameTab = new TextTab(); $nameTab->setTabLabel('send_check_payee_name')->setValue($owner->getFullName()); $tabs[] = $nameTab; $addressTab = new TextTab(); $addressTab->setTabLabel('send_check_address')->setValue($owner->getStreet()); $tabs[] = $addressTab; $cityTab = new TextTab(); $cityTab->setTabLabel('send_check_city')->setValue($owner->getCity()); $tabs[] = $cityTab; $stateTab = new TextTab(); $stateTab->setTabLabel('send_check_state')->setValue($owner->getState()->getName()); $tabs[] = $stateTab; $zipTab = new TextTab(); $zipTab->setTabLabel('send_check_zip')->setValue($owner->getZip()); $tabs[] = $zipTab; } elseif ($transferMethod !== Distribution::TRANSFER_METHOD_NOT_FUNDING) { $paymentMethod = 'electronic'; $electronicType = $transferMethod === Distribution::TRANSFER_METHOD_WIRE_TRANSFER ? 'wire_transfer' : 'bank_transfer'; $electronicTypeTab = new RadioGroupTab(); $electronicTypeTab->setGroupName('electronic_type')->setValue($electronicType)->setSelected(true); $tabs[] = $electronicTypeTab; /** @var BankInformation $bankInformation */ $bankInformation = $this->signableObject->getBankInformation(); if ($bankInformation) { $isCheckingAccountType = $bankInformation->getAccountType() == BankInformation::ACCOUNT_TYPE_CHECK; $bankAccountTypeTab = new RadioGroupTab(); $bankAccountTypeTab->setGroupName('electronic_account_type')->setValue($isCheckingAccountType ? 'check' : 'saving')->setSelected(true); $tabs[] = $bankAccountTypeTab; $bankAccountTitleTab = new TextTab(); $bankAccountTitleTab->setTabLabel('electronic_bank_account_title')->setValue($bankInformation->getAccountTitle()); $tabs[] = $bankAccountTitleTab; $bankAccountNumberTab = new TextTab(); $bankAccountNumberTab->setTabLabel('electronic_bank_account_number')->setValue($bankInformation->getAccountNumber()); $tabs[] = $bankAccountNumberTab; $bankRoutingNumberTab = new TextTab(); $bankRoutingNumberTab->setTabLabel('electronic_bank_routing_number')->setValue($bankInformation->getRoutingNumber()); $tabs[] = $bankRoutingNumberTab; $bankNameTab = new TextTab(); $bankNameTab->setTabLabel('electronic_bank_name')->setValue($bankInformation->getName()); $tabs[] = $bankNameTab; } } $paymentMethodTab = new RadioGroupTab(); $paymentMethodTab->setGroupName('payment_method')->setValue($paymentMethod)->setSelected(true); $tabs[] = $paymentMethodTab; return $tabs; }
public function isDocumentSignatureForObjectExist(SignableInterface $object) { $signature = $this->findOneDocumentSignatureBySourceIdAndType($object->getSourceObjectId(), $object->getDocumentSignatureType()); return $signature ? true : false; }
/** * Get docusign template for signable object * * @param SignableInterface $object * @return string * @throws \InvalidArgumentException * @throws \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException */ private function getTemplateForSignableObject(SignableInterface $object) { $type = $object->getDocumentSignatureType(); $accountType = $object->getClientAccount()->getSystemType(); switch ($type) { case DocumentSignature::TYPE_OPEN_OR_TRANSFER_ACCOUNT: if ($accountType === SystemAccount::TYPE_PERSONAL_INVESTMENT || $accountType === SystemAccount::TYPE_JOINT_INVESTMENT) { $key = 'personal_account'; } elseif ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $key = 'ira_account'; } else { throw new \InvalidArgumentException(sprintf('Invalid account type: %s', $accountType)); } break; case DocumentSignature::TYPE_TRANSFER_INFORMATION: $key = 'account_transfer_form'; break; case DocumentSignature::TYPE_AUTO_INVEST_CONTRIBUTION: case DocumentSignature::TYPE_ONE_TIME_CONTRIBUTION: $key = 'electronic_funds_transfer_form'; break; case DocumentSignature::TYPE_CHANGE_BENEFICIARY: $key = 'beneficiary_designation_form'; break; case DocumentSignature::TYPE_AUTO_DISTRIBUTION: if ($accountType === SystemAccount::TYPE_PERSONAL_INVESTMENT || $accountType === SystemAccount::TYPE_JOINT_INVESTMENT) { $key = 'electronic_funds_transfer_form'; } elseif ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $key = 'ira_distribution_form'; } else { throw new \InvalidArgumentException(sprintf('Invalid account type: %s', $accountType)); } break; case DocumentSignature::TYPE_ONE_TIME_DISTRIBUTION: if ($accountType === SystemAccount::TYPE_PERSONAL_INVESTMENT || $accountType === SystemAccount::TYPE_JOINT_INVESTMENT) { if (!$object instanceof Distribution || !$object->isOneTime()) { throw new \InvalidArgumentException(sprintf('Object must be one-time distribution.')); } if (Distribution::TRANSFER_METHOD_RECEIVE_CHECK === $object->getTransferMethod()) { $key = 'check_request'; } elseif (Distribution::TRANSFER_METHOD_WIRE_TRANSFER == $object->getTransferMethod()) { $key = 'wire_instructions'; } else { $key = 'electronic_funds_transfer_form'; } } elseif ($accountType === SystemAccount::TYPE_ROTH_IRA || $accountType === SystemAccount::TYPE_TRADITIONAL_IRA) { $key = 'ira_distribution_form'; } else { throw new \InvalidArgumentException(sprintf('Invalid account type: %s', $accountType)); } break; default: throw new \InvalidArgumentException(sprintf('Invalid document signature type: %s', $type)); break; } if (!$this->hasTemplate($key)) { throw new InvalidConfigurationException('Template with key: %s does not exist. Check configuration.', $key); } return $this->getTemplate($key); }
/** * Generate collection of tabs * * @return TabCollection * @throws \InvalidArgumentException */ public function generate() { $account = $this->signableObject->getClientAccount(); $transferInformation = $this->signableObject; if ($transferInformation instanceof Distribution) { $transferDirection = 'distribution'; } elseif ($transferInformation instanceof BaseContribution) { $transferDirection = 'contribution'; } else { throw new \InvalidArgumentException('Signable object must be instance of Distribution or BaseContribution'); } $client = $account->getClient(); $companyInformation = $client->getRiaCompanyInformation(); $tabs = array(); $advisorCode = new TextTab(); $advisorCode->setTabLabel('advisor#')->setValue($this->getAdvisorCode($companyInformation)); $tabs[] = $advisorCode; $accountNumber = new TextTab(); $accountNumber->setTabLabel('account#')->setValue($account->getAccountNumber()); $tabs[] = $accountNumber; if ($account->hasSystemAccount()) { $transferInstructionsValue = 'update'; } else { $transferInstructionsValue = 'new'; } $transferInstructionsTab = new RadioGroupTab(); $transferInstructionsTab->setGroupName('transfer_instructions')->setValue($transferInstructionsValue)->setSelected(true); $tabs[] = $transferInstructionsTab; $direction = new RadioGroupTab(); $direction->setGroupName('transfer_direction')->setValue($transferDirection)->setSelected(true); $tabs[] = $direction; $bankInformation = $transferInformation->getBankInformation(); if ($bankInformation) { $accountOwnerName = new TextTab(); $accountOwnerName->setTabLabel('account_owner_full_name')->setValue($bankInformation->getAccountOwnerFullName()); $tabs[] = $accountOwnerName; if (trim($bankInformation->getJointAccountOwnerFullName()) != '') { $jointAccountOwner = new TextTab(); $jointAccountOwner->setTabLabel('joint_account_owner_full_name')->setValue($bankInformation->getJointAccountOwnerFullName()); $tabs[] = $jointAccountOwner; } $bankAccountType = new RadioGroupTab(); $bankAccountTypeValue = $bankInformation->getAccountType() == BankInformation::ACCOUNT_TYPE_CHECK ? 'checking' : 'savings'; $bankAccountType->setGroupName('bank_account_type')->setValue($bankAccountTypeValue)->setSelected(true); $tabs[] = $bankAccountType; $bankAccountNumber = new TextTab(); $bankAccountNumber->setTabLabel('bank_account_number')->setValue($bankInformation->getAccountNumber()); $tabs[] = $bankAccountNumber; $bankRoutingNumber = new TextTab(); $bankRoutingNumber->setTabLabel('bank_routing_number')->setValue($bankInformation->getRoutingNumber()); $tabs[] = $bankRoutingNumber; $bankName = new TextTab(); $bankName->setTabLabel('bank_name')->setValue($bankInformation->getName()); $tabs[] = $bankName; $bankAccountTitle = new TextTab(); $bankAccountTitle->setTabLabel('bank_account_title')->setValue($bankInformation->getAccountTitle()); $tabs[] = $bankAccountTitle; $bankPhoneNumber = new TextTab(); $bankPhoneNumber->setTabLabel('bank_phone_number')->setValue($bankInformation->getPhoneNumber()); $tabs[] = $bankPhoneNumber; } if ($transferInformation instanceof BaseContribution) { $startDateValue = $transferInformation->getStartTransferDate(); $frequency = $transferInformation->getTransactionFrequency(); switch ($frequency) { case BaseContribution::TRANSACTION_FREQUENCY_ONE_TIME: $frequencyValue = 'one_time'; break; case BaseContribution::TRANSACTION_FREQUENCY_EVERY_OTHER_WEEK: $frequencyValue = 'every_other_week'; break; case BaseContribution::TRANSACTION_FREQUENCY_MONTHLY: $frequencyValue = 'monthly'; break; case BaseContribution::TRANSACTION_FREQUENCY_QUARTERLY: $frequencyValue = 'quarterly'; break; default: $frequencyValue = null; break; } } elseif ($transferInformation instanceof Distribution) { $startDateValue = $transferInformation->getTransferDate(); $frequency = $transferInformation->getFrequency(); if ($transferInformation->isOneTime()) { $frequencyValue = 'one_time'; } else { switch ($frequency) { case Distribution::FREQUENCY_EVERY_OTHER_WEEK: $frequencyValue = 'every_other_week'; break; case Distribution::FREQUENCY_MONTHLY: $frequencyValue = 'monthly'; break; case Distribution::FREQUENCY_QUARTERLY: $frequencyValue = 'quarterly'; break; default: $frequencyValue = null; break; } } } else { $frequencyValue = null; $startDateValue = null; } if ($frequencyValue) { $frequencyTab = new RadioGroupTab(); $frequencyTab->setGroupName('transaction_frequency')->setValue($frequencyValue)->setSelected(true); $tabs[] = $frequencyTab; } $amountTab = new TextTab(); $amountTab->setTabLabel('transaction_amount')->setValue($transferInformation->getAmount()); $tabs[] = $amountTab; if ($startDateValue) { $startDateTab = new TextTab(); $startDateTab->setTabLabel('transfer_start_date')->setValue($startDateValue->format('m/d')); $tabs[] = $startDateTab; } return new TabCollection($tabs); }