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(); }
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.')); } } } }); }