public function modelSecuritiesListAction(Request $request) { $ria = $this->getUser(); /** @var \Doctrine\ORM\EntityManager $em */ $em = $this->get('doctrine.orm.entity_manager'); /** @var $riaCompanyInformation RiaCompanyInformation */ $riaCompanyInformation = $ria->getRiaCompanyInformation(); /** @var CeModel $selectedModel */ $selectedModel = $riaCompanyInformation->getPortfolioModel(); $request->request->set('model_id', $selectedModel->getId()); $securityAssignments = $em->getRepository('WealthbotAdminBundle:SecurityAssignment')->findBy(array('model_id' => $selectedModel->getId())); $securityAssignment = new SecurityAssignment(); $securityAssignment->setModel($selectedModel); $form = $this->createForm(new ModelSecurityFormType($selectedModel, $em), $securityAssignment); $formHandler = new ModelSecurityFormHandler($form, $request, $em, array('security_assignment' => $securityAssignment)); if ($request->isMethod('post')) { if ($formHandler->process()) { return $this->redirect($this->generateUrl('rx_ria_model_securities_list', array('model_id' => $selectedModel->getId()))); } } return $this->render('WealthbotRiaBundle:Securities:model_securities_list.html.twig', array('form' => $form->createView(), 'is_show_municipal_bond' => $riaCompanyInformation->getUseMunicipalBond(), 'security_assignments' => $securityAssignments, 'is_show_transaction_edit' => $riaCompanyInformation->isShowTransactionEdit())); }
private function loadModelSecurities(ObjectManager $manager) { $subclassIndex = 1; $subclassesCount = 9; $maxSecuritiesCount = floor(count($this->securities) / $subclassesCount); $i = 1; foreach ($this->securities as $item) { if ($i > $maxSecuritiesCount * $subclassIndex && $subclassIndex < $subclassesCount) { $subclassIndex++; } /** @var Security $security */ /** @var Subclass $subclass */ $security = $this->getReference('security-' . $item['symbol']); $subclass = $this->getReference('subclass-' . $subclassIndex); $securityAssignment = new SecurityAssignment(); $securityAssignment->setSecurity($security); $securityAssignment->setSubclass($subclass); $securityAssignment->setModel($subclass->getAssetClass()->getModel()); $manager->persist($securityAssignment); $this->addReference('model-security-assignment-' . $i, $securityAssignment); $i++; } }
private function createModel(ObjectManager $manager, User $riaUser) { $categories = $this->createCategories($riaUser); $modelManager = new CeModelManager($manager, '\\Wealthbot\\AdminBundle\\Entity\\CeModel'); $model = $modelManager->createCustomModel($riaUser); $model->setCommissionMin($this->strategy['commission_min']); $model->setCommissionMax($this->strategy['commission_max']); $model->setForecast($this->strategy['forecast_min']); $model->setGenerousMarketReturn($this->strategy['generous_market_return']); $model->setLowMarketReturn($this->strategy['low_market_return']); $model->setIsAssumptionLocked($this->strategy['is_assumption_locked']); $securityAssignments = array(); $isExistSecurityAssignment = function ($arr, $securityIndex) { return isset($arr[$securityIndex]); }; foreach ($this->strategy['models'] as $modelItem) { $child = $modelManager->createChild($model); $child->setName($modelItem['name']); $child->setRiskRating($modelItem['risk_rating']); $child->setIsAssumptionLocked($modelItem['is_assumption_locked']); $model->addChildren($child); foreach ($modelItem['entities'] as $entityItem) { /** @var AssetClass $assetClass */ $assetClass = $categories[$entityItem['asset_class_index']]; $assetClass->setModel($model); $subclass = $assetClass->getSubclasses()->get($entityItem['subclass_index']); /** @var Security $security */ $security = $this->getReference('security-' . $entityItem['security']); if ($isExistSecurityAssignment($securityAssignments, $entityItem['security'])) { $securityAssignment = $securityAssignments[$entityItem['security']]; } else { $securityAssignment = new SecurityAssignment(); $securityAssignment->setSecurity($security); $securityAssignment->setSubclass($subclass); $securityAssignment->setModel($model); $securityAssignments[$entityItem['security']] = $securityAssignment; $this->addReference('model-security-assignment-asset-index-' . $entityItem['asset_class_index'] . '-subclass-index-' . $entityItem['subclass_index'] . '-security-' . $entityItem['security'], $securityAssignment); } $entity = new CeModelEntity(); $entity->setModel($child); $entity->setAssetClass($assetClass); $entity->setSubclass($subclass); $entity->setSecurityAssignment($securityAssignment); $entity->setPercent($entityItem['percent']); if ($entityItem['muni_substitution_security']) { /** @var Security $muniSubstitutionSecurity */ $muniSubstitutionSecurity = $this->getReference('security-' . $entityItem['muni_substitution_security']); if ($isExistSecurityAssignment($securityAssignments, $entityItem['muni_substitution_security'])) { /** @var securityAssignment $muniSubstitutionAssignment */ $muniSubstitutionAssignment = $securityAssignments[$entityItem['muni_substitution_security']]; $muniSubstitutionAssignment->setMuniSubstitution(true); } else { $muniSubstitutionAssignment = new SecurityAssignment(); $muniSubstitutionAssignment->setSecurity($muniSubstitutionSecurity); $muniSubstitutionAssignment->setSubclass($subclass); $muniSubstitutionAssignment->setModel($model); $securityAssignments[$entityItem['muni_substitution_security']] = $muniSubstitutionAssignment; } $entity->setMuniSubstitution($muniSubstitutionAssignment); } if ($entityItem['tax_loss_harvesting_security']) { /** @var Security $taxLossHarvestingSecurity */ $taxLossHarvestingSecurity = $this->getReference('security-' . $entityItem['tax_loss_harvesting_security']); if ($isExistSecurityAssignment($securityAssignments, $entityItem['tax_loss_harvesting_security'])) { /** @var securityAssignment $taxLossHarvestingAssignment */ $taxLossHarvestingAssignment = $securityAssignments[$entityItem['tax_loss_harvesting_security']]; $taxLossHarvestingAssignment->setMuniSubstitution(true); } else { $taxLossHarvestingAssignment = new SecurityAssignment(); $taxLossHarvestingAssignment->setSecurity($taxLossHarvestingSecurity); $taxLossHarvestingAssignment->setSubclass($subclass); $taxLossHarvestingAssignment->setModel($model); $securityAssignments[$entityItem['tax_loss_harvesting_security']] = $taxLossHarvestingAssignment; } $entity->setTaxLossHarvesting($taxLossHarvestingAssignment); } $child->addModelEntity($entity); } $this->addReference('cec-ria-model-' . $modelItem['index'], $child); } return $model; }
/** * Save Client Subclasses * This method is needed for save a snapshot of RIA subclasses. * * @param User $client * @param User $ria * @throws EntityNotFoundException */ public function saveClientSubclasses(User $client, User $ria) { $em = $this->getEntityManager(); $selectedModel = $ria->getRiaCompanyInformation()->getPortfolioModel(); //$riaSubClasses = $this->findDefaultsByModelId($selectedModel); $riaSubClasses = $this->findRiaSubclasses($ria->getId()); if (!$riaSubClasses) { $riaSubClasses = $this->findDefaultsByModelId($selectedModel); } // When subclasses for RIA are defined in system ? if (!$riaSubClasses) { throw new EntityNotFoundException("Ria doesn't have subclasses, logic error please check!"); } foreach ($riaSubClasses as $riaSubClass) { $clientSubClass = new Subclass(); $clientSubClass->setAssetClass($riaSubClass->getAssetClass()); $clientSubClass->setAccountType($riaSubClass->getAccountType()); $clientSubClass->setOwner($client); $clientSubClass->setSource($riaSubClass); $clientSubClass->setName($riaSubClass->getName()); $clientSubClass->setExpectedPerformance($riaSubClass->getExpectedPerformance()); /** @var Subclass $riaSubClass */ foreach ($riaSubClass->getSecurityAssignments() as $securityAssignment) { $newSecurityAssignment = new SecurityAssignment(); $newSecurityAssignment->setIsPreferred($securityAssignment->getIsPreferred()); $newSecurityAssignment->setModel($clientSubClass->getAssetClass()->getModel()); $newSecurityAssignment->setMuniSubstitution($securityAssignment->getMuniSubstitution()); //$newSecurityAssignment->setRia($ria); Deprecated $newSecurityAssignment->setSecurity($securityAssignment->getSecurity()); $newSecurityAssignment->setSecurityTransaction($securityAssignment->getSecurityTransaction()); $newSecurityAssignment->setSubclass($clientSubClass); $em->persist($newSecurityAssignment); } $em->persist($clientSubClass); } $em->flush(); }
/** * Copy model with model entities, asset classes and subclasses * * @param CeModelInterface $model * @param User $owner * @param array $assetClasses * @param array $subclasses * @return CeModelInterface */ private function copyModelWithRelationsForOwner(CeModelInterface $model, User $owner, array &$assetClasses, array &$subclasses) { $clone = $model->getCopy(); $clone->setOwner($owner); if ($owner->hasRole('ROLE_CLIENT')) { $commissions = $this->objectManager->getRepository('WealthbotAdminBundle:SecurityAssignment')->findMinAndMaxTransactionFeeForModel($model->getParentId()); $commissions = array_filter($commissions); $clone->setCommissionMin(isset($commissions['minimum']) ? $commissions['minimum'] : 0); $clone->setCommissionMax(isset($commissions['maximum']) ? $commissions['maximum'] : 0); } /** @var $modelEntity CeModelEntityInterface */ foreach ($model->getModelEntities() as $modelEntity) { /** @var $cloneModelEntity CeModelEntityInterface */ $cloneModelEntity = $modelEntity->getCopy(); $subclass = $modelEntity->getSubclass(); if (!isset($subclasses[$subclass->getId()])) { $cloneSubclass = $subclass->getCopy(); $cloneSubclass->setOwner($owner); $subclasses[$subclass->getId()] = $cloneSubclass; $assetClass = $subclass->getAssetClass(); if (isset($assetClasses[$assetClass->getId()])) { $cloneAssetClass = $assetClasses[$assetClass->getId()]; } else { $cloneAssetClass = $assetClass->getCopy(); $assetClasses[$assetClass->getId()] = $cloneAssetClass; } $cloneAssetClass->addSubclasse($cloneSubclass); $cloneSubclass->setAssetClass($cloneAssetClass); } else { $cloneSubclass = $subclasses[$subclass->getId()]; } if ($securityAssignment = $modelEntity->getSecurityAssignment()) { $found = null; #Searching one SA that has needed subclass and security. foreach ($this->clonedSecurityAssignments as $sa) { if ($sa->getSubclass() == $cloneSubclass && $sa->getSecurity() == $securityAssignment->getSecurity()) { $found = $sa; break; } } if (!$found) { $found = $this->objectManager->getRepository('WealthbotAdminBundle:SecurityAssignment')->findOneBy(array('security' => $securityAssignment->getSecurity(), 'subclass' => $cloneSubclass)); } if (!$found) { $newSecurityAssignment = new SecurityAssignment(); //create SecurityAssignment $newSecurityAssignment->setIsPreferred($securityAssignment->getIsPreferred()); $newSecurityAssignment->setModel($clone); $newSecurityAssignment->setMuniSubstitution($securityAssignment->getMuniSubstitution()); $newSecurityAssignment->setSecurity($securityAssignment->getSecurity()); $newSecurityAssignment->setSecurityTransaction($securityAssignment->getSecurityTransaction()); $newSecurityAssignment->setSubclass($cloneSubclass); $newSecurityAssignment->setModelId($clone->getId()); $newSecurityAssignment->setSecurityId($securityAssignment->getSecurity()->getId()); if ($cloneSubclass) { $newSecurityAssignment->setSubclassId($cloneSubclass->getId()); } if ($cloneSubclass) { $cloneSubclass->addSecurityAssignment($newSecurityAssignment); } $this->clonedSecurityAssignments[] = $newSecurityAssignment; $found = $newSecurityAssignment; } if ($found) { $cloneModelEntity->setSecurityAssignment($found); } } $cloneModelEntity->setModel($clone); $cloneModelEntity->setSubclass($subclasses[$subclass->getId()]); $clone->addModelEntity($cloneModelEntity); } return $clone; }
public function modelSecuritiesListAction(Request $request) { /** @var \Doctrine\ORM\EntityManager $em */ /** @var $model CeModel */ $em = $this->get('doctrine.orm.entity_manager'); $model = $em->getRepository('WealthbotAdminBundle:CeModel')->find($request->get('model_id')); $securityAssignments = $em->getRepository('WealthbotAdminBundle:SecurityAssignment')->findBy(array('model_id' => $model->getId())); $securityAssignment = new SecurityAssignment(); $securityAssignment->setModel($model); $form = $this->createForm(new ModelSecurityFormType($model, $em), $securityAssignment); if ($request->isMethod('post')) { $formHandler = new ModelSecurityFormHandler($form, $request, $em, array('security_assignment' => $securityAssignment)); if ($formHandler->process()) { return $this->redirect($this->generateUrl('rx_admin_model_securities_list', array('model_id' => $model->getId()))); } } return $this->render('WealthbotAdminBundle:Securities:model_securities_list.html.twig', array('form' => $form->createView(), 'security_assignments' => $securityAssignments)); }