<?php
namespace App\Repository;
use App\Entity\Supplier;
use App\Entity\SupplierCustomer;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
class SupplierCustomerRepository extends GeneralRepository
{
public function __construct(EntityManagerInterface $em)
{
parent::__construct($em, $em->getClassMetadata(SupplierCustomer::class));
$this->setLetter('sc');
$this->setDefaultSort([
'field' => 'createdAt',
'order' => 'DESC'
]);
$this->setDefaultLimit(10);
}
public function setSearchParams($params)
{
parent::setSearchParams($params);
// $isPartner = ( isset( $params['partner'] ) ) ? $params['partner'] : false;
// $this->partner( $isPartner );
if (isset($params['supplierStatus'])) {
$this->supplierStatus($params['supplierStatus']);
}
if (isset($params['partnerOnly'])) {
if ($params['partnerOnly']) {
$this->partnerOnly();
}
}
if (isset($params['guestOnly'])) {
if ($params['guestOnly']) {
$this->guestOnly();
}
}
if (isset($params['customer'])) {
$this->qb
->andWhere($this->letter . '.customer = :customer')
->setParameter(':customer', $params['customer']);
}
if (isset($params['customers'])) {
$this->qb
->andWhere($this->letter . '.customer IN (:customers)')
->setParameter(':customers', $params['customers']);
}
if (isset($params['supplier'])) {
$this->qb
->andWhere($this->letter . '.supplier = :supplier')
->setParameter(':supplier', $params['supplier']);
}
if (isset($params['suppliers'])) {
$this->qb
->andWhere($this->letter . '.supplier IN (:suppliers)')
->setParameter(':suppliers', $params['suppliers']);
}
if (isset($params['adherentNumber'])) {
$this->qb
->andWhere($this->letter . '.adherentNumber = :adherentNumber')
->setParameter(':adherentNumber', $params['adherentNumber']);
}
if (isset($params['deliveryModel'])) {
$this->qb
->andWhere($this->letter . '.deliveryModel = :deliveryModel')
->setParameter(':deliveryModel', $params['deliveryModel']);
}
if (isset($params['createdBefore'])) {
$this->createdBefore($params['createdBefore']);
}
if (isset($params['adherentNumber' ])) {
$this->adherentNumber($params['adherentNumber']);
}
}
private function adherentNumber($adherentNumber)
{
$this->qb
->andWhere($this->letter . '.adherentNumber = :adherentNumber')
->setParameter('adherentNumber', $adherentNumber);
}
private function createdBefore(DateTime $date)
{
$day = clone $date;
$day->setTime(23, 59, 59);
$this->qb
->andWhere($this->letter . '.createdAt <= :date')
->setParameter('date', $day);
}
/**
* @param $id
*
* @return array
*/
public function findOneEnabledById($id)
{
$query = $this->createQueryBuilder('sc')
->join('sc.supplier', 's')
->where('s.enabled = :enabled')
->andWhere('sc.id = :id')
->setParameter('id', $id)
->setParameter('enabled', true);
return $query->getQuery()->getResult();
}
private function supplierStatus($supplierStatus)
{
$this->qb
->join($this->letter . '.supplier', 's')
->andWhere('s.status = :supplierStatus')
->setParameter(':supplierStatus', $supplierStatus);
}
private function partnerOnly()
{
$this->qb
->join($this->letter . '.supplier', 's')
->andWhere("s.status = '" . Supplier::STATUS_PARTNER . "'");
}
private function guestOnly()
{
$this->qb
->join($this->letter . '.supplier', 's');
$this->qb
->andWhere("s.status IN ('" . Supplier::STATUS_UNTRUSTED . "', '" . Supplier::STATUS_TRUSTED . "')");
}
}