示例#1
0
 /**
  * Fonction récursive de création des catégories.
  *
  * @param array $categoriesContent Le contenu de la catégorie
  * @param Categorie $categorieParente La catégorie parente
  */
 private function loadCategories($categoriesContent, $categorieParente = null)
 {
     foreach ($categoriesContent as $categorieContent) {
         $categorie = new Categorie();
         $categorie->setNom($categorieContent['nom']);
         $categorie->setCategorieParente($categorieParente);
         $categorie->setRang($categorieContent['rang']);
         $this->manager->persist($categorie);
         if (!empty($categorieContent['subcategories'])) {
             $subCategoriesContent = $categorieContent['subcategories'];
             $this->loadCategories($subCategoriesContent, $categorie);
         }
     }
 }
 /**
  * Calcul le montant cumulé des mouvements d'une catégorie, entre deux dates.
  *
  * @param Categorie $categorie La catégorie.
  * @param \DateTime $dateStart Date de début, incluse.
  * @param \DateTime $dateEnd   Date de fin, incluse.
  * @param string    $order     'ASC' (par défaut) ou 'DESC'.
  *
  * @return float
  */
 public function getMontantTotalByDate(Categorie $categorie, \DateTime $dateStart, \DateTime $dateEnd, $order = 'ASC')
 {
     // Calcul du montant total des mouvements de la catégorie
     $queryBuilder = $this->getEntityManager()->createQueryBuilder();
     $expressionBuilder = $this->getEntityManager()->getExpressionBuilder();
     $and = $expressionBuilder->andX();
     $and->add($expressionBuilder->in('m.categorie', ':categories'));
     $and->add($expressionBuilder->gte('m.date', ':date_start'));
     $and->add($expressionBuilder->lte('m.date', ':date_end'));
     // La liste des catégories de mouvements
     $categorieID = $categorie->getId();
     $categories = array($categorieID);
     $categoriesFilles = $categorie->getCategoriesFillesRecursive();
     foreach ($categoriesFilles as $categorieFille) {
         $categories[] = $categorieFille->getId();
     }
     $queryBuilder->select('SUM(m.montant) AS total')->from('ComptesBundle:Mouvement', 'm')->where($and)->setParameter('categories', $categories)->setParameter('date_start', $dateStart)->setParameter('date_end', $dateEnd)->orderBy('m.date', $order);
     $result = $queryBuilder->getQuery()->getSingleResult();
     $montant = $result['total'] !== null ? $result['total'] : 0;
     return $montant;
 }
 /**
  * Récupère les mouvements d'une catégorie.
  *
  * @param Categorie $categorie La catégorie.
  * @param string    $order     'ASC' (par défaut) ou 'DESC'.
  *
  * @return \Doctrine\Common\Collections\ArrayCollection
  */
 public function findByCategorie(Categorie $categorie, $order = 'ASC')
 {
     // Récupération des mouvements de la catégorie
     $queryBuilder = $this->createQueryBuilder('m');
     // La liste des catégories de mouvements
     $categorieID = $categorie->getId();
     $categories = array($categorieID);
     $categoriesFilles = $categorie->getCategoriesFillesRecursive();
     foreach ($categoriesFilles as $categorieFille) {
         $categories[] = $categorieFille->getId();
     }
     $queryBuilder->where('m.categorie in (:categories)')->orderBy('m.date', $order)->setParameter('categories', $categories);
     $mouvements = $queryBuilder->getQuery()->getResult();
     return $mouvements;
 }
示例#4
0
 /**
  * Dissocie toutes les catégories filles.
  *
  * @return Categorie
  */
 public function removeCategoriesFilles()
 {
     $this->categoriesFilles->clear();
     return $this;
 }