<?php
namespace AdminBundle\Controller;
use CoreBundle\Entity\AdminLog;
use CoreBundle\Entity\Dealer;
use CoreBundle\Model\Api\AutoRia\AutoRia;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use InsuranceBundle\Entity\Coefficient;
use InsuranceBundle\Model\Program;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class AjaxController extends AbstractController
{
public function add(Request $Request, Program $programModel): JsonResponse
{
$programModel->addOrUpdateBase($Request);
return new JsonResponse(['success' => 'true']);
}
public function getModels(Request $Request, AutoRia $autoRia): JsonResponse
{
$brandId = $Request->get('brandId');
$models = $autoRia->getModels($brandId);
return $this->json(['data' => $models]);
}
public function editOption(Request $Request, Program $programModel): JsonResponse
{
$type = $Request->request->get('type');
switch ($type) {
case 'option':
$programModel->addOrUpdateOption($Request);
break;
case 'list':
$programModel->addOrUpdateList($Request);
break;
}
return new JsonResponse(['success' => 'true']);
}
public function data(Request $Request, EntityManagerInterface $em, Program $programModel): JsonResponse
{
$id = $Request->get('id');
$Coefficient = $em->getRepository(Coefficient::class)->find($id);
if (!$Coefficient) {
return new JsonResponse(['success' => 'false']);
}
return new JsonResponse(['success' => true, 'data' => $programModel->coefficientToArray($Coefficient)]);
}
public function state(Request $Request, EntityManagerInterface $em): JsonResponse
{
$id = $Request->get('id');
$Coefficient = $em->getRepository(Coefficient::class)->find($id);
if (!$Coefficient) {
return new JsonResponse(['success' => 'false']);
}
$Coefficient->setState($Request->request->get('state'));
$em->persist($Coefficient);
$em->flush();
return new JsonResponse(['success' => 'true']);
}
public function deleteRateSave(Request $Request, EntityManagerInterface $em): JsonResponse
{
$dealerId = $Request->request->get('dealer');
$rate = $Request->request->get('rate');
$rateIn = $Request->request->get('rate_in_delivery');
$user = $this->getUser();
$dealer = $user->getDealer();
if (
(!$user->hasRole('ROLE_SUPER_ADMIN') && !$dealer) ||
(!$user->hasRole('ROLE_SUPER_ADMIN') && $dealer && $dealer->getId() != $dealerId)
) {
throw new AccessDeniedException;
}
$dealer = $em->getRepository(Dealer::class)->find($dealerId);
if (!$dealer) {
throw new NotFoundHttpException;
}
$log = new AdminLog();
$log->setDateCreate(new DateTime());
$log->setUser($user);
$log->setAfterData(json_encode(['rate' => $rate, 'in_rate' => $rateIn]));
$log->setBeforeData(json_encode(['rate' => $dealer->getRate(), 'in_rate' => $dealer->getRateInDelivery()]));
$log->setEntityId($dealer->getId());
$log->setEntityType(get_class($dealer));
$log->setDealer($user->getDealer());
$em->persist($log);
//TODO remove unnecessary flushes
$em->flush();
$dealer->setRate((float)$rate);
$dealer->setRateInDelivery((float)$rateIn);
$em->persist($log);
//TODO remove unnecessary flushes
$em->flush();
$em->persist($dealer);
$em->flush();
return new JsonResponse(['success' => true]);
}
public function getDealers(EntityManagerInterface $em): JsonResponse
{
$dealers = [
'dealers' => [],
'subDealers' => [],
];
$dealersEntities =
$em->getRepository(Dealer::class)->findAll();
foreach ($dealersEntities as $dealer) {
$dealers['dealers'][] = [
'id' => $dealer->getId(),
'name' => $dealer->getName(),
];
}
$subDealersEntities =
$em->getRepository(\ImporterBundle\Entity\Dealer::class)->findAll();
foreach ($subDealersEntities as $subDealer) {
$dealers['subDealers'][] = [
'id' => $subDealer->getId(),
'name' => $subDealer->getName(),
];
}
return new JsonResponse($dealers);
}
public function setUserDealer(Request $request, EntityManagerInterface $em)
{
$dealerId = $request->request->get('user_dealer');
$subDealerId = $request->request->get('user_sub_dealer');
$user = $this->getUser();
if ($dealerId) {
$dealerEntity = $em->getRepository(Dealer::class)->find($dealerId);
if (!$dealerEntity) {
return new JsonResponse(['success' => false]);
}
$user->setDealer($dealerEntity);
}
if ($subDealerId) {
$subDealerEntity = $em->getRepository(\ImporterBundle\Entity\Dealer::class)->find($subDealerId);
if (!$subDealerEntity) {
return new JsonResponse(['success' => false]);
}
$user->setSubDealer($subDealerEntity);
}
$em->persist($user);
$em->flush();
return new JsonResponse(['success' => true]);
}
}