orderBy('position', 'ASC'); } public function joinProductFamily():self { if (!$this->isJoinProductFamily) { $this->isJoinProductFamily = true; return $this ->innerJoin('.productFamily', 'pf') ->addSelect('pf'); } return $this; } public function filterBySection(SectionInterface $section):self { $this->joinProductFamilySectionProperties(false); $this->andWhereSection('pfsp', $section); $this->andWhere('pfsp.status = 1'); return $this; } public function joinProductFamilySectionProperties(bool $addSelect = true): self { $this->joinProductFamily(); if (!$this->isJoinProductFamilySectionProperties) { $this->isJoinProductFamilySectionProperties = true; $this->leftJoin('pf.productFamilySectionProperties', 'pfsp'); if ($addSelect) { $this->addSelect('pfsp'); } } return $this; } public function filterIsOnline():self { $this->joinProductFamily(); $this->andWhereStatus('pf', 1); $this->andWhereStatus($this->id, 1); return $this; } public function filterAvailableQuantityNegative() :self { $this->andWhere( $this->query->expr()->orX( $this->query->expr()->andX( $this->query->expr()->orX( 'pf.behaviorCountStock LIKE :behaviorCountStockByProductFamily', 'pf.behaviorCountStock LIKE :behaviorCountStockByMeasure' ), 'pf.availableQuantity < 0 ' ), $this->query->expr()->andX( 'pf.behaviorCountStock LIKE :behaviorCountStockByProduct', 'r.availableQuantity < 0 ' ) ) ); $this->setParameter( 'behaviorCountStockByProductFamily', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY ); $this->setParameter('behaviorCountStockByMeasure', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE); $this->setParameter('behaviorCountStockByProduct', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT); return $this; } public function filterAvailableQuantitySupplierNegative() :self { $this->andWhere( $this->query->expr()->orX( $this->query->expr()->andX( $this->query->expr()->orX( 'pf.behaviorCountStock LIKE :behaviorCountStockByProductFamily', 'pf.behaviorCountStock LIKE :behaviorCountStockByMeasure' ), 'pf.availableQuantitySupplier < 0 ' ), $this->query->expr()->andX( 'pf.behaviorCountStock LIKE :behaviorCountStockByProduct', 'r.availableQuantitySupplier < 0 ' ) ) ); $this->setParameter( 'behaviorCountStockByProductFamily', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY ); $this->setParameter('behaviorCountStockByMeasure', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE); $this->setParameter('behaviorCountStockByProduct', ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT); return $this; } }