<?php
namespace App\EventListener;
use App\Repository\LocationRepository;
use App\Repository\UserLocationRepository;
use App\Repository\UserRepository;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
class JWTCreatedListener
{
private UserRepository $userRepository;
private LocationRepository $locationRepository;
private UserLocationRepository $userLocationRepository;
public function __construct(UserRepository $userRepository, LocationRepository $locationRepository, UserLocationRepository $userLocationRepository)
{
$this->userRepository = $userRepository;
$this->locationRepository = $locationRepository;
$this->userLocationRepository = $userLocationRepository;
}
/**
* @param JWTCreatedEvent $event
*
* @return void
*/
public function onJWTCreated(JWTCreatedEvent $event)
{
$user = $this->userRepository->findOneBy(['email' => $event->getData()['username']]);
$payload = $event->getData();
$payload['email'] = $event->getData()['username'];
$payload['id'] = $user->getId();
$payload['name'] = $user->getName();
$payload['surnames'] = $user->getSurnames();
$payload['location'] = null;
if ($user->getIdUserRole()->getKey() != "ROLE_MULTI_STORE") {
$location = $this->userLocationRepository->findOneBy(['idUser' => $user]);
$payload['location'] = $location ? [
'customerRefPo' => $location->getIdLocation()->getCustomerRefPo(),
'customerRefPoTov' => $location->getIdLocation()->getCustomerRefPoTov(),
'name' => $location->getIdLocation()->getName(),
'id' => $location->getIdLocation()->getId()
] : null;
}
$payload['region'] = $user->getIdRegion() ? ["id" => $user->getIdRegion()->getId(), "name" => $user->getIdRegion()->getName()] : null;
$payload['subregion'] = $user->getIdSubregion() ? ["id" => $user->getIdSubregion()->getId(), "name" => $user->getIdSubregion()->getName()] : null;
$payload['country'] = $user->getIdCountry() ? ["id" => $user->getIdCountry()->getId(), "name" => $user->getIdCountry()->getName()] : null;
$payload['isAllRegion'] = $user->getIsAllRegion();
$payload['isAllSubregion'] = $user->getIsAllSubregion();
$payload['isAllStore'] = $user->getIsAllLocation();
$payload['company_logo'] = ($user->getIdCompany()) ? $user->getIdCompany()->getImage() : null;
$payload['company_name'] = ($user->getIdCompany()) ? $user->getIdCompany()->getName() : null;
$payload['company_id'] = ($user->getIdCompany()) ? $user->getIdCompany()->getId() : null;
$payload['company_isSeparateOrdersBasedOnCatalogs'] = ($user->getIdCompany()) ? $user->getIdCompany()->getIsSeparateOrdersBasedOnCatalogs() : null;
$payload['isHideAvailability'] = ($user->getIdCompany()) ? $user->getIdCompany()->getIsHideAvailability() : null;
$payload['isAllowedReportProductionPlan'] = $user->getIsAllowedReportProductionPlan();
$payload['isAllowedReportSupplyChain'] = $user->getIsAllowedReportSupplyChain();
$payload['isAllowedReportAvailability'] = $user->getIsAllowedReportAvailability();
$payload['isAllowedReportConsumption'] = $user->getIsAllowedReportConsumption();
$payload['isAllowedReportMaxOrder'] = $user->getIsAllowedReportMaxOrder();
$payload['isAllowedReportStock'] = $user->getIsAllowedReportStock();
$payload['isAllowedReportStockQty'] = $user->getIsAllowedReportStockQty();
$payload['isImported'] = $user->getIsImported();
if (!$user->getIsActive()) {
$payload = [];
}
$event->setData($payload);
}
}