/**
  * 
  * @param Treatment $currentTreatment
  * @param Treatment $oldTreatment
  */
 public function moveInstitutionTreatmentsToAnotherTreatment(Treatment $currentTreatment, Treatment $oldTreatment)
 {
     $query = "\r\n        INSERT INTO `institution_treatments` (`institution_specialization_id`, `treatment_id`)\r\n        SELECT a.institution_specialization_id, " . $currentTreatment->getId() . "\r\n        FROM  `institution_treatments` a\r\n        LEFT JOIN (SELECT  * FROM `institution_treatments` WHERE `treatment_id` = {$currentTreatment->getId()}  ) as _existing\r\n        ON _existing.`institution_specialization_id` = a.institution_specialization_id\r\n        WHERE a.treatment_id = " . $oldTreatment->getId() . "\r\n        AND _existing.`institution_specialization_id` IS NULL";
     $conn = $this->getEntityManager()->getConnection();
     $conn->executeQuery($query);
     $deleteQuery = "DELETE FROM institution_treatments WHERE treatment_id = " . $oldTreatment->getId();
     return $conn->executeQuery($deleteQuery);
 }
 /**
  * 
  * @param Treatment $treatment
  * @return \HealthCareAbroad\TermBundle\Entity\Term
  */
 private function createTermFromTreatment(Treatment $treatment)
 {
     // check first if this term already exists
     $term = $this->termRepository->findOneByName($treatment->getName());
     if (!$term) {
         // term does not exist
         $term = new Term();
         $term->setName($treatment->getName());
     }
     // create new term document
     $termDocument = new TermDocument();
     $termDocument->setDocumentId($treatment->getId());
     $termDocument->setTerm($term);
     $termDocument->setType(TermDocument::TYPE_TREATMENT);
     $term->setInternal(true);
     $term->addTermDocument($termDocument);
     return $term;
 }
 /**
  * Find active search terms by Treatment
  *
  * @param Treatment $treatment
  * @return array SearchTerm
  */
 public function findByTreatment(Treatment $treatment)
 {
     $qb = $this->getQueryBuilderByDocumentIdAndType($treatment->getId(), TermDocument::TYPE_TREATMENT);
     // TODO: integrate pager here or not?
     return $qb->getQuery()->getResult();
 }
 /**
  * Get the internal Term of a Treatment
  * 
  * @param Treatment $treatment
  * @return Term
  */
 public function getTreatmentInternalTerm(Treatment $treatment)
 {
     $qb = $this->doctrine->getManager()->createQueryBuilder();
     $qb->select('t, td')->from('TermBundle:Term', 't')->innerJoin('t.termDocuments', 'td')->where('td.documentId = :treatmentId')->setParameter('treatmentId', $treatment->getId())->andWhere('td.type = :documentType')->setParameter('documentType', TermDocument::TYPE_TREATMENT)->andWhere('t.name = :treatmentName')->setParameter('treatmentName', $treatment->getName())->andWhere('t.internal = 1');
     $term = $qb->getQuery()->getOneOrNullResult();
     return $term;
 }
 /**
  * Merge $fromTreatment to $toTreatment
  * 
  * @param Treatment $fromTreatment
  * @param Treatment $toTreatment
  */
 public function mergeTreatmentToAnotherTreatment(Treatment $fromTreatment, Treatment $toTreatment)
 {
     /***
      * Steps for merge
      * 1. Move all institution_treatments of $fromTreatment to $toTreatment. Considerations:
      *      a. Consider existing institution_treatments.institution_id and institution_treatments.toTreatment combination
      * 2. Delete $fromTreatment
      */
     $connection = $this->doctrine->getConnection();
     $em = $this->doctrine->getManager();
     // step 1
     $sql = "UPDATE IGNORE `institution_treatments` inst_tr \n                SET inst_tr.`treatment_id` = :toTreatmentId\n                WHERE inst_tr.`treatment_id` = :fromTreatmentId";
     $statement = $connection->prepare($sql);
     $statement->bindValue('fromTreatmentId', $fromTreatment->getId());
     $statement->bindValue('toTreatmentId', $toTreatment->getId());
     $statement->execute();
     // remove the remaining institutions $fromTreatment with existing $toTreatment that were left out from the above operation
     $sql = "DELETE FROM `institution_treatments` WHERE `treatment_id` = :fromTreatmentId";
     $statement = $connection->prepare($sql);
     $statement->bindValue('fromTreatmentId', $fromTreatment->getId());
     $statement->execute();
     // step 2
     // remove $fromTreatment
     $em->remove($fromTreatment);
     $em->flush();
 }