- <?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]);
-     }
- }
-