<?php
namespace App\Manager;
use App\Entity\Property;
use App\Repository\PropertyRepository;
use App\Service\LocationIP\LocationIpInterface as LocationIP;
use App\Service\Regionalization\Location;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class PropertyManager extends BaseManager
{
private RequestStack $requestStack;
public function __construct(EntityManagerInterface $em, PropertyRepository $repository, RequestStack $requestStack)
{
parent::__construct($em, $repository);
$this->repository = $repository;
$this->requestStack = $requestStack;
}
public function create(): Property
{
return new Property();
}
public function listTypesFilter($location = '')
{
$city = $this->requestStack->getSession()->get(LocationIP::REGION);
if (is_null($city)) {
return $this->repository->listTypesFilter($location);
}
/** @var Location $city */
return $this->repository->listTypesFilterByCity($city->getRegion()->getSlug());
}
public function listLocationsFilter($type = '')
{
return $this->repository->listLocationsFilter($type);
}
public function listTabPropertyTypes()
{
$city = $this->requestStack->getSession()->get(LocationIP::REGION);
if (is_null($city)) {
return $this->repository->listTabPropertyTypes();
}
/** @var Location $city */
return $this->repository->listTabPropertyTypesByCity($city->getRegion()->getSlug());
}
public function search($type_slug = '', $location_slug = '', $types = [])
{
$city = $this->requestStack->getSession()->get(LocationIP::REGION);
if (is_null($city)) {
return $this->repository->search($type_slug, $location_slug, $types);
}
/** @var Location $city */
return $this->repository->searchByCity($city->getRegion()->getSlug(), $type_slug, $location_slug, $types);
}
public function home()
{
return $this->repository->home();
}
public function listActiveRelateds($parent_id)
{
return $this->repository->listActiveRelateds($parent_id);
}
public function listActives()
{
return $this->repository->listActives();
}
public function loadBySlug($slug)
{
return $this->repository->loadBySlug($slug);
}
public function listContactOptions()
{
return $this->repository->listContactOptions();
}
public function listAutocomplete()
{
return $this->repository->listAutocomplete();
}
public function listLandings($entity)
{
return $this->repository->listLandings($entity);
}
public function listCountGroupLocation()
{
return $this->repository->listCountGroupLocation();
}
}