Beispiel #1
0
 private function getPriceData(Security $security = null)
 {
     if ($security) {
         /** @var SecurityPrice $price */
         foreach ($security->getSecurityPrices() as $price) {
             if ($price->getIsCurrent()) {
                 return $price->getPrice();
             }
         }
     }
     return null;
 }
 public function setUp()
 {
     $subclassMock1 = $this->getMock('Wealthbot\\AdminBundle\\Entity\\Subclass', array('getId'));
     $subclassMock1->expects($this->any())->method('getId')->will($this->returnValue(1));
     $subclassMock1->setName('Subclass1');
     $subclassMock1->setExpectedPerformance(0.5);
     $subclassMock2 = $this->getMock('Wealthbot\\AdminBundle\\Entity\\Subclass', array('getId'));
     $subclassMock2->expects($this->any())->method('getId')->will($this->returnValue(2));
     $subclassMock2->setName('Subclass2');
     $subclassMock2->setExpectedPerformance(0.7);
     $entity1 = new CeModelEntity();
     $security1 = new Security();
     $security1->setExpenseRatio(0.6);
     $securityAssignment1 = new SecurityAssignment();
     $securityAssignment1->setSecurity($security1);
     $securityAssignment1->setSubclass($subclassMock1);
     $entity1->setSubclass($subclassMock1);
     $entity1->setPercent(40);
     $entity1->setSecurityAssignment($securityAssignment1);
     $entity2 = new CeModelEntity();
     $security2 = new Security();
     $security2->setExpenseRatio(0.3);
     $securityAssignment2 = new SecurityAssignment();
     $securityAssignment2->setSecurity($security2);
     $securityAssignment2->setSubclass($subclassMock2);
     $entity2->setSubclass($subclassMock2);
     $entity2->setPercent(60);
     $entity2->setSecurityAssignment($securityAssignment2);
     $entity3 = new CeModelEntity();
     $security3 = new Security();
     $security3->setExpenseRatio(0.7);
     $securityAssignment3 = new SecurityAssignment();
     $securityAssignment3->setSecurity($security3);
     $securityAssignment3->setSubclass($subclassMock1);
     $entity3->setSubclass($subclassMock1);
     $entity3->setPercent(100);
     $entity3->setSecurityAssignment($securityAssignment3);
     $entity3->setIsQualified(true);
     $model = new CeModel('Model');
     $model->addModelEntity($entity1);
     $model->addModelEntity($entity2);
     $model->addModelEntity($entity3);
     $model->setLowMarketReturn(0.6);
     $model->setGenerousMarketReturn(1.3);
     $model->setForecast(0);
     $this->portfolioInformation = new PortfolioInformation();
     $this->portfolioInformation->setModel($model);
 }
 function load(ObjectManager $manager)
 {
     $usedSymbols = array();
     $repository = $manager->getRepository('WealthbotAdminBundle:Security');
     $securities = $this->getCsvData('securities.csv');
     foreach ($securities as $index => $item) {
         if ($index === 0) {
             continue;
         }
         $name = trim($item[0]);
         $symbol = trim($item[1]);
         $typeString = 'security-type-' . (trim($item[2]) === 'ETF' ? 'EQ' : 'MU');
         $expenseRatio = round((double) str_replace(',', '.', trim($item[3])), 2);
         /** @var SecurityType $securityType */
         $securityType = $this->getReference($typeString);
         $exist = $repository->findOneBySymbol($symbol);
         if (!$exist && !in_array($symbol, $usedSymbols)) {
             $usedSymbols[] = $symbol;
             $security = new Security();
             $security->setName($name);
             $security->setSymbol($symbol);
             $security->setSecurityType($securityType);
             $security->setExpenseRatio($expenseRatio);
             $manager->persist($security);
         }
     }
     $manager->flush();
 }
Beispiel #4
0
 private function loadSecurities(ObjectManager $manager)
 {
     $repository = $manager->getRepository('WealthbotAdminBundle:Security');
     foreach ($this->securities as $item) {
         $security = $repository->findOneBySymbol($item['symbol']);
         if (!$security) {
             /** @var SecurityType $securityType */
             $securityType = $this->getReference('security-type-' . $item['security_type']);
             $security = new Security();
             $security->setName($item['name']);
             $security->setSymbol($item['symbol']);
             $security->setSecurityType($securityType);
             $security->setExpenseRatio($item['exp_ratio']);
             $manager->persist($security);
         }
         $this->addReference('security-' . $item['symbol'], $security);
     }
 }
 /**
  * @see Command
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $em = $this->getContainer()->get('doctrine')->getEntityManager();
     $em->getConnection()->getConfiguration()->setSQLLogger(null);
     $securityRepo = $em->getRepository('WealthbotAdminBundle:Security');
     $securityTypeRepo = $em->getRepository('WealthbotAdminBundle:SecurityType');
     $i = 0;
     $typeHash = array();
     $securities = $this->loadCsvData('security_full.csv', $maxLength = 10000, $delimiter = ',');
     foreach ($securities as $index => $item) {
         if ($index === 0) {
             continue;
         }
         $type = trim($item[0]);
         $type = $type === 'ETF' ? 'EQ' : 'MU';
         $symbol = trim($item[1]);
         $name = trim($item[2]);
         $ratio = round((double) str_replace(',', '.', trim($item[3])), 2);
         if (isset($typeHash[$type])) {
             $securityType = $typeHash[$type];
         } else {
             $securityType = $securityTypeRepo->findOneByName($type);
             if ($securityType) {
                 $typeHash[$type] = $securityType;
             }
         }
         $security = $securityRepo->findOneBySymbol($symbol);
         if (!$security && $securityType) {
             if (++$i % 100 == 0) {
                 $security = new Security();
                 $security->setName($name);
                 $security->setSymbol($symbol);
                 $security->setSecurityType($securityType);
                 $security->setExpenseRatio($ratio);
                 $em->persist($security);
                 $output->writeln("Security items [{$i}] has been loaded.");
             }
         }
     }
     $em->flush();
     $em->clear();
     $output->writeln("Security items [{$i}] has been loaded.");
     $output->writeln("Success!");
 }
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $ria = $this->ria;
     $em = $this->em;
     $account = $this->account;
     $factory = $builder->getFormFactory();
     $data = $builder->getData();
     $isPreferred = false;
     if ($data && $data->getid()) {
         $association = $em->getRepository('WealthbotClientBundle:AccountOutsideFund')->findOneBy(array('account_id' => $account->getId(), 'security_assignment_id' => $data->getId()));
         if ($association) {
             $isPreferred = $association->getIsPreferred();
         }
     }
     $selectedModel = $ria->getRiaCompanyInformation()->getPortfolioModel();
     $builder->add('security', new FundFormType())->add('subclasses', 'entity', array('class' => 'WealthbotAdminBundle:Subclass', 'query_builder' => function (EntityRepository $er) use($selectedModel) {
         $q = $er->createQueryBuilder('s')->leftJoin('s.assetClass', 'ac')->where('ac.model_id=:model_id')->setParameter('model_id', $selectedModel->getId());
         return $q;
     }, 'property_path' => 'subclass', 'empty_value' => 'Choose an Option', 'required' => false))->add('is_preferred', 'checkbox', array('property_path' => false, 'required' => false, 'data' => $isPreferred))->add('expense_ratio', 'hidden', array('data' => 0.0001));
     $builder->addEventListener(FormEvents::PRE_BIND, function (FormEvent $event) use($em, $ria, $factory) {
         $form = $event->getForm();
         $data = $event->getData();
         // Search fund with selected Name and Symbol in our DB
         $existSecurity = $em->getRepository('WealthbotAdminBundle:Security')->findOneBy(array('name' => $data['security']['name'], 'symbol' => $data['security']['symbol']));
         if ($existSecurity) {
             $form->get('security')->setData($existSecurity);
             $existSecurityAssignment = $em->getRepository('WealthbotAdminBundle:SecurityAssignment')->findOneBy(array('ria_user_id' => $ria->getId(), 'security_id' => $existSecurity->getId()));
             if ($existSecurityAssignment) {
                 if ($existSecurityAssignment->getSubclass()) {
                     $form->get('subclasses')->setData($existSecurityAssignment->getSubclass());
                 }
                 if (!$existSecurityAssignment->getSubclass() && isset($data['subclasses']) && $data['subclasses']) {
                     $form->setData($existSecurityAssignment);
                 }
                 if ($existSecurityAssignment->getSubclass() && empty($data['subclasses'])) {
                     $form->addError(new FormError('You have already associated this security with ' . $existSecurityAssignment->getSubclass()->getName() . ' and you can\'t remove association.'));
                 }
                 if ($existSecurityAssignment->getSubclass() && $data['subclasses'] && $existSecurityAssignment->getSubclass()->getId() != $data['subclasses'] && (isset($data['is_preferred']) && $data['is_preferred'])) {
                     if (isset($data['is_override']) && $data['is_override']) {
                         $form->add($factory->createNamed('is_override', 'hidden', 1, array('property_path' => false)));
                         $form->setData($existSecurityAssignment);
                     } else {
                         $form->addError(new FormError('You have already associated this security with ' . $existSecurityAssignment->getSubclass()->getName() . ' . Please confirm that you want to override it ?'));
                         $form->add($factory->createNamed('is_override', 'hidden', 1, array('property_path' => false, 'attr' => array('value' => 1))));
                     }
                 }
                 if ($existSecurityAssignment->getSubclass() && $data['subclasses'] && $existSecurityAssignment->getSubclass()->getId() !== $data['subclasses']) {
                     $form->setData($existSecurityAssignment);
                 }
             }
         } else {
             $security = new Security();
             $security->setName($data['security']['name']);
             $security->setSymbol($data['security']['symbol']);
             $em->persist($security);
             $em->flush();
             $form->get('security')->setData($security);
         }
         if (isset($data['subclasses']) && $data['subclasses']) {
             $form->get('is_preferred')->setData(true);
         }
     });
     $builder->addEventListener(FormEvents::BIND, function (FormEvent $event) use($em, $ria, $account, $factory) {
         $form = $event->getForm();
         $data = $event->getData();
         $data->setRia($ria);
         if ($data->getSubclass() && !$form->get('is_preferred')->getData()) {
             $form->get('is_preferred')->addError(new FormError('Required'));
         }
         // If RIA check security as preferred
         if ($form->get('is_preferred')->getData()) {
             // In this case Subclass is required
             if (!$data->getSubclass()) {
                 $form->get('subclasses')->addError(new FormError('Subclass is required.'));
             } else {
                 $assetClass = $data->getSubclass()->getAssetClass();
                 $dql_security = "";
                 if ($data->getId()) {
                     $dql_security = "AND sec.id != :security_assignment_id";
                 }
                 $dql = "SELECT aof, sec, s\n                                FROM WealthbotClientBundle:AccountOutsideFund aof\n                                LEFT JOIN aof.securityAssignment sec\n                                LEFT JOIN sec.subclass s\n                                WHERE aof.account_id = :account_id AND sec.ria_user_id = :ria_id AND aof.is_preferred = 1\n                                    AND s.asset_class_id = :asset_class_id {$dql_security}\n                                GROUP BY s.asset_class_id";
                 $stmt = $em->createQuery($dql);
                 $stmt->setParameters(array('account_id' => $account->getId(), 'ria_id' => $ria->getId(), 'asset_class_id' => $assetClass->getId()));
                 if ($data->getId()) {
                     $stmt->setParameter('security_assignment_id', $data->getId());
                 }
                 $results = $stmt->getResult();
                 if (count($results) > 0) {
                     $form->get('subclasses')->addError(new FormError('You cannot have two of the same asset classes being bought in one current retirement plan.'));
                 }
             }
         }
     });
 }