src/AppBundle/Controller/DefaultController.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\AppBundle\Controller;
  3. use App\AppBundle\Entity\LoginLog;
  4. use App\AppBundle\Entity\MacroDealer;
  5. use App\AppBundle\Entity\MvMycmMyamsCustomer;
  6. use App\AppBundle\Entity\User;
  7. use App\AppBundle\Other\Constants;
  8. use App\AppBundle\Repository\CurrencyRepository;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use App\AppBundle\Repository\CountryRepository;
  11. use App\AppBundle\Repository\WarehouseRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use EasyCorp\Bundle\EasyAdminBundle\Configuration\ConfigManager;
  14. use Psr\Log\LoggerInterface;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  18. use Symfony\Component\Finder\Exception\AccessDeniedException;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\RedirectResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  24. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. class DefaultController extends AbstractController {
  27. const DOP = "DOP";
  28. const THIRD_PARTS = "3rdParts";
  29. const EUR_CURRENCY_CODE = 200;
  30. public function __construct(
  31. private ConfigManager $configManager,
  32. private TranslatorInterface $translator,
  33. private ParameterBagInterface $parameterBag
  34. ) {
  35. }
  36. protected static function getMacroDealerGroups() {
  37. return array(
  38. self::DOP => User::DOP,
  39. self::THIRD_PARTS => User::THIRD_PARTS
  40. );
  41. }
  42. /**
  43. * @Route("/", name="homepage")
  44. */
  45. public function indexAction(Request $request) {
  46. /** @var User $user */
  47. $user = $this->getUser();
  48. if(!$user->getIsActive())
  49. return new RedirectResponse("/not-active");
  50. $authChceker = $this->container->get('security.authorization_checker');
  51. /** @var User $user */
  52. $user = $this->getUser();
  53. if($authChceker->isGranted('ROLE_GRANT_DASHBOARD')) {
  54. if (!$user->getDefaultUrl()) {
  55. $menu = $this->configManager->getBackendConfig('design')['menu'];
  56. $user->setDefaultUrl($menu);
  57. }
  58. $url = $user->getDefaultUrl();
  59. } elseif($authChceker->isGranted('ROLE_GRANT_USERS')) {
  60. $url = '/admin/?action=list&entity=User';
  61. }
  62. $response = new RedirectResponse($url);
  63. return $response;
  64. }
  65. /**
  66. * @Route("/switch-version", name="switch_version")
  67. */
  68. public function switchVersion(Request $request) {
  69. $version = $request->get('v');
  70. /** @var User $user */
  71. $user = $this->getUser();
  72. $em = $this->getDoctrine()->getManager();
  73. $user->setSwitchToOld($version);
  74. $authChceker = $this->get('security.authorization_checker');
  75. if($authChceker->isGranted('ROLE_GRANT_DASHBOARD')) {
  76. $loginLog = new LoginLog();
  77. if (!$user->getDefaultUrl()) {
  78. $menu = $this->configManager->getBackendConfig('design')['menu'];
  79. $user->setDefaultUrl($menu);
  80. }
  81. $url = $user->getDefaultUrl();
  82. if(!$version) {
  83. $user->setLastLoginMyAms(new \DateTime());
  84. $user->setNumberOfLoginsMyAms($user->getNumberOfLoginsMyAms() + 1);
  85. $loginLog->setPortal(Constants::PORTAL["MYI/AB"]);
  86. $newRole = $user->getRolesMyAms();
  87. } else {
  88. $user->setLastLogin(new \DateTime());
  89. $user->setNumberOfLogins($user->getNumberOfLogins() + 1);
  90. $loginLog->setPortal(Constants::PORTAL["I/ASOD"]);
  91. $newRole = $user->getRolesIsod();
  92. }
  93. $loginLog->setUser($user);
  94. $em->persist($loginLog);
  95. } else {
  96. throw new AccessDeniedException("Postal switching failed!");
  97. }
  98. $response = new RedirectResponse($url);
  99. $em->persist($user);
  100. $em->flush();
  101. // Create an token for target role
  102. $token = new UsernamePasswordToken($user, null, 'main', $newRole);
  103. $this->get('security.token_storage')->setToken($token);
  104. return $response;
  105. }
  106. /**
  107. * @Route("/download-manual", name="download_manual")
  108. */
  109. public function downloadManual(Request $request) {
  110. $language = $request->get('lang');
  111. $environment = $this->getParameter("environment");
  112. $filename = "User_Manual_MyAMSBusiness_$language.pdf";
  113. $path = $this->getParameter('kernel.project_dir') . "/public/downloads/$environment/";
  114. if (file_exists($path . $filename)) {
  115. $content = file_get_contents($path . $filename);
  116. $response = new Response();
  117. $response->headers->set('Content-Type', 'mime/type');
  118. $response->headers->set('Content-Disposition', 'attachment;filename="' . $filename);
  119. $response->setContent($content);
  120. } else {
  121. $translator = $this->translator;
  122. $message = $translator->trans('app.file.error.not.found');
  123. $response = new Response('', Response::HTTP_NOT_FOUND, ['content-type' => 'application/json']);
  124. $response->setContent(json_encode(['data' => $message]));
  125. }
  126. return $response;
  127. }
  128. /**
  129. * @Route("/user/selectedCountry", name="selectedCountry")
  130. */
  131. public function selectedCountry(Request $request) {
  132. $id = $request->get('id');
  133. /** @var CountryRepository $countryRepo */
  134. $countryRepo = $this->getDoctrine()->getRepository('AppBundle:Country');
  135. $country = $countryRepo->findOneById($id);
  136. /** @var User $user */
  137. $user = $this->getUser();
  138. $user->setSelectedCountry($country);
  139. if (in_array($user->getPrettyRole(), [User::ROLE_PSM, User::ROLE_DP, User::ROLE_DEALER])) {
  140. /** @var ArrayCollection $userMacrodealersByCountrySelected */
  141. $userMacrodealersByCountrySelected = $this->getAllowedMacroDealers($user);
  142. if ($userMacrodealersByCountrySelected->count() == 1) {
  143. $user->setSelectedMacroDealer($userMacrodealersByCountrySelected->first());
  144. } else {
  145. $user->setSelectedMacroDealer(null);
  146. }
  147. } else {
  148. $user->setSelectedMacroDealer(null);
  149. }
  150. $user->setSelectedWarehouses(null);
  151. $em = $this->getDoctrine()->getManager();
  152. $em->persist($user);
  153. $em->flush();
  154. $this->get('session')->set('sameCountry', 0);
  155. return new JsonResponse(array('success' => true, 'id' => $id));
  156. }
  157. /**
  158. * @Route("/user/selectedBrand", name="selectedBrand")
  159. */
  160. public function selectedBrand(Request $request) {
  161. $brands = $request->get('ids');
  162. /** @var User $user */
  163. $user = $this->getUser();
  164. $user->setSelectedBrands(implode(',', $brands));
  165. $em = $this->getDoctrine()->getManager();
  166. $em->persist($user);
  167. $em->flush();
  168. return new JsonResponse(array('success' => true, 'ids' => $brands));
  169. }
  170. private function getAllowedMacroDealers(User $user) {
  171. $country = $user->getSelectedCountry();
  172. return $user->getMacroDealers()->filter(
  173. function ($entry) use ($country) {
  174. return $entry->getCountry() == $country;
  175. }
  176. );
  177. }
  178. /**
  179. * @Route("/user/selectedMacroDealer", name="selectedMacroDealer")
  180. */
  181. public function selectedMacroDealer(Request $request) {
  182. $id = $request->get('id');
  183. /** @var WarehouseRepository $macroDealerRepo */
  184. $macroDealerRepo = $this->getDoctrine()->getRepository('AppBundle:MacroDealer');
  185. /** @var MacroDealer $macroDealer */
  186. $macroDealer = null;
  187. $macroDealerGroup = null;
  188. if (!is_null($id)) {
  189. if (is_numeric($id)) {
  190. $macroDealer = $macroDealerRepo->find($id);
  191. } elseif (in_array($id, array_keys(self::getMacroDealerGroups()))) {
  192. $macroDealerGroup = self::getMacroDealerGroups()[$id];
  193. }
  194. }
  195. /** @var User $user */
  196. $user = $this->getUser();
  197. $user->setSelectedMacroDealer($macroDealer);
  198. $user->setSelectedCountry($macroDealer ? $macroDealer->getCountry() : $user->getSelectedCountry());
  199. $user->setSelectedWarehouses(null);
  200. $user->setSelectedMacroDealerGroup($macroDealerGroup);
  201. $em = $this->getDoctrine()->getManager();
  202. $em->persist($user);
  203. $em->flush();
  204. return new JsonResponse(array('success' => true, 'id' => $id));
  205. }
  206. /**
  207. * @Route("/user/selectedWarehouse", name="selectedWarehouse")
  208. */
  209. public function selectedWarehouse(Request $request) {
  210. $id = $request->get('id');
  211. /** @var WarehouseRepository $warehousesRepo */
  212. $warehousesRepo = $this->getDoctrine()->getRepository('AppBundle:Warehouse');
  213. $warehouse = $warehousesRepo->find($id);
  214. /** @var User $user */
  215. $user = $this->getUser();
  216. $user->setSelectedWarehouses($warehouse);
  217. $em = $this->getDoctrine()->getManager();
  218. $em->persist($user);
  219. $em->flush();
  220. return new JsonResponse(array('success' => true, 'id' => $id));
  221. }
  222. /**
  223. * @Route("/checkStatus", name="checkIsodStatus")
  224. */
  225. public function checkStatus() {
  226. return new Response("Ok");
  227. }
  228. /**
  229. * @Route("/user/selectedCurrency", name="selectedCurrency")
  230. */
  231. public function selectedCurrency(Request $request) {
  232. $code = $request->request->get('value');
  233. $response = array();
  234. /** @var CurrencyRepository $warehousesRepo */
  235. $currencyRepo = $this->getDoctrine()->getRepository('AppBundle:Currency');
  236. $currency = $currencyRepo->findOneBy(array(
  237. "code" => $code,
  238. "dateYear" => date("Y")
  239. ));
  240. //check if exist currency rate
  241. if (is_null($currency)) {
  242. $response["status"] = "error";
  243. $response["type"] = "unknown_rate";
  244. } else {
  245. /** @var User $user */
  246. $user = $this->getUser();
  247. $user->setSelectedCurrencyCode($code);
  248. $em = $this->getDoctrine()->getManager();
  249. $em->persist($user);
  250. $em->flush();
  251. $response["status"] = "success";
  252. }
  253. /* flag the fact that we are in the same country */
  254. $this->get('session')->set('sameCountry', 1);
  255. return new JsonResponse($response);
  256. }
  257. /**
  258. * @Route("/user/getWarehousesByMacroDealer/{id}", name="getWarehousesByMacroDealer")
  259. */
  260. public function getAvaliableWarehousesByMacrodealer(Request $request, $id) {
  261. /** @var WarehouseRepository $warehousesRepo */
  262. $warehousesRepo = $this->getDoctrine()->getRepository('AppBundle:Warehouse');
  263. $result = array();
  264. foreach ($warehousesRepo->getMacroDealerWharehousesById($id) as $autocompleteItem) {
  265. $result[] = array(
  266. 'id' => (int)$autocompleteItem->getId(),
  267. 'text' => $autocompleteItem->getWhId() . ' - ' . $autocompleteItem->getDescription()
  268. );
  269. }
  270. return new JsonResponse($result);
  271. }
  272. /**
  273. * @Route("/user/getAvailableWarehouse/{macrodealers}", name="getAvailableWarehouse")
  274. */
  275. public function getAvailableWarehouse(Request $request, $macrodealers) {
  276. $macrodealersId = json_decode($macrodealers);
  277. /** @var WarehouseRepository $warehousesRepo */
  278. $warehousesRepo = $this->getDoctrine()->getRepository('AppBundle:Warehouse');
  279. $result = array();
  280. foreach ($warehousesRepo->getWarehousesInMacrodealers($macrodealersId) as $autocompleteItem) {
  281. $result[] = array(
  282. 'id' => (int)$autocompleteItem->getId(),
  283. 'text' => $autocompleteItem->getWhId() . ' - ' . $autocompleteItem->getDescription()
  284. );
  285. }
  286. return new JsonResponse($result);
  287. }
  288. /**
  289. * @Route("/user/getAvailableDealership/{dealerGroups}", name="getAvailableDealership")
  290. */
  291. public function getAvailableDealership(Request $request, $dealerGroups) {
  292. $dealerGroupId = json_decode($dealerGroups);
  293. /** @var MvMycmMyamsCustomerRepository $mvMycmMyamsCustomerRepo */
  294. $mvMycmMyamsCustomerRepo = $this->getDoctrine()->getRepository(MvMycmMyamsCustomer::class);
  295. $result = array();
  296. foreach ($mvMycmMyamsCustomerRepo->getFilteredDealership($dealerGroupId) as $autocompleteItem) {
  297. $result[] = array(
  298. 'id' => (string)$autocompleteItem['cdCustomerFull'],
  299. 'text' => $autocompleteItem['cdCustomerFull']
  300. . ' - ' . $autocompleteItem['dsCustomer']
  301. . (isset($autocompleteItem['cdCommercialBrand']) ? " (" . $autocompleteItem['cdCommercialBrand'] . ")" : "")
  302. );
  303. }
  304. return new JsonResponse($result);
  305. }
  306. /**
  307. * @Route("/user/getAvaliableMacrodealers/{macrodealer}", name="getAvaliableMacrodealers")
  308. */
  309. public function getAvaliableMacrodealers(Request $request, $macrodealer) {
  310. $macrodealerId = json_decode($macrodealer);
  311. /** @var MacroDealerRepository $repo */
  312. $repo = $this->getDoctrine()->getRepository(MacroDealer::class);
  313. $macrodealer = $repo->find($macrodealerId);
  314. $result = array();
  315. foreach ($repo->findByCountry($macrodealer->getCountry()) as $autocompleteItem) {
  316. $result[] = array(
  317. 'id' => (int)$autocompleteItem->getId(),
  318. 'text' => $autocompleteItem->__toString()
  319. );
  320. }
  321. return new JsonResponse($result);
  322. }
  323. /**
  324. * @Route("/user/getAllMacrodealers", name="getAllMacrodealers")
  325. */
  326. public function getAllMacrodealers(Request $request) {
  327. /** @var WarehouseRepository $warehousesRepo */
  328. $repo = $this->getDoctrine()->getRepository('AppBundle:MacroDealer');
  329. $result = array();
  330. foreach ($repo->findAll() as $autocompleteItem) {
  331. $result[] = array(
  332. 'id' => (int)$autocompleteItem->getId(),
  333. 'text' => $autocompleteItem->__toString()
  334. );
  335. }
  336. return new JsonResponse($result);
  337. }
  338. /**
  339. * @Route("/testdevexpress", name="testdevexpress")
  340. */
  341. public function testDevExpress() {
  342. return $this->render(
  343. '@App/testDevExpress.html.twig',
  344. array()
  345. );
  346. }
  347. /**
  348. * @Route("/testwebix", name="testwebix")
  349. */
  350. public function testwebix() {
  351. return $this->render(
  352. '@App/testWebix.html.twig',
  353. array()
  354. );
  355. }
  356. /**
  357. * @Route("/getAllTest", name="getAll")
  358. */
  359. public function getAllTest() {
  360. $fp = fopen(__DIR__ . '/../Resources/public/testdata.json', 'r');
  361. die(fgets($fp));
  362. }
  363. /**
  364. * @Route("/administration/dmsCostomerCode", name="dmsSection")
  365. */
  366. public function dsmSection() {
  367. return $this->render(
  368. '@App/admin/dmsSection.html.twig', [
  369. 'page_title' => 'app.administration.dmsCustomerCode'
  370. ]
  371. );
  372. }
  373. /**
  374. * @Route("/selloutCustomPages/{type}", name="selloutCustomPages")
  375. */
  376. public function selloutCustomPages($type) {
  377. $user = $this->container->get('security.token_storage')->getToken()->getUser();
  378. if (!$user->getAccessToNew()) {
  379. throw $this->createAccessDeniedException();
  380. } else {
  381. $url = '/admin/?action=list&entity=' . $type;
  382. $response = new RedirectResponse($url);
  383. return $response;
  384. }
  385. }
  386. /**
  387. * @Route("/import/{type}", name="import")
  388. */
  389. public function import($type) {
  390. $user = $this->container->get('security.token_storage')->getToken()->getUser();
  391. if (!$user->getAccessToNew()) {
  392. throw $this->createAccessDeniedException();
  393. }
  394. return $this->render(
  395. "@App/admin/import/$type.html.twig",
  396. array()
  397. );
  398. }
  399. /**
  400. * @Route("/administration/profileManagement", name="profileManagement")
  401. */
  402. public function profileManagement() {
  403. /** @var User $user */
  404. $user = $this->getUser();
  405. return new RedirectResponse($this->generateUrl(
  406. "easyadmin",
  407. array(
  408. 'entity' => 'UserSettings',
  409. 'action' => 'edit',
  410. 'id' => $user->getId()
  411. )
  412. ));
  413. }
  414. /**
  415. * @Route("/logout-to-iveco", name="logout_to_iveco")
  416. *
  417. */
  418. public function logoutToIveco() {
  419. $dealerPortal = $this->getParameter("dealer_portal");
  420. return $this->redirect("https://$dealerPortal/");
  421. }
  422. /**
  423. * @Route("/not-active", name="not_active")
  424. */
  425. public function userNotActiveAction(Request $request) {
  426. $content = $this->render('@App/security/user-message.html.twig', array(
  427. 'title' => 'app.user.notProfiled.message',
  428. 'emailToContact' => $this->getParameter("profiler_email")
  429. ));
  430. return new Response($content);
  431. }
  432. /**
  433. * @Route("/error", name="error")
  434. */
  435. public function errorAction(Request $request) {
  436. $content = $this->render('@App/security/user-message.html.twig', array(
  437. 'title' => 'app.error.message',
  438. 'emailToContact' => $this->getParameter("profiler_email")
  439. ));
  440. return new Response($content);
  441. }
  442. }