コード例 #1
0
ファイル: CeModelManager.php プロジェクト: junjinZ/wealthbot
 /**
  * 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;
 }