<?php
namespace DcSiteBundle\Controller;
use CoreBundle\Component\CoreFormFactory;
use CoreBundle\Component\FormManager;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Forms;
use CoreBundle\Entity\Vehicles\InStock;
use CoreBundle\Entity\Vehicles\Vehicle;
use CoreBundle\Factory\Vehicle as VehicleFactory;
use CoreBundle\Model\Api\OnlineService\ApiServer1C;
use CoreBundle\Model\Vehicles\Repository;
use CoreBundle\Services\MediaExtensionVidi;
use DateTime;
use DcSiteBundle\Entity\Events;
use DcSiteBundle\Entity\LeasingCalcLog;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use MyBundle\Entity\Basket;
use PortalBundle\Model\SeoMetaTag;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\RouterInterface;
use Twig\Environment;
class FormController extends BaseDcController
{
const INSURANCE_DEALER = 5;
const BODY_REPAIR_UNIQUE_ID = 'BODY_SERVICE';
public function __construct(CoreFormFactory $coreFormFactory, SeoMetaTag $seoMetaTag, RequestStack $requestStack, RouterInterface $router, FormManager $formManager, EntityManagerInterface $em, ApiServer1C $apiServer1C, SessionInterface $session, Filesystem $filesystem, MediaExtensionVidi $mediaExtensionVidi, Repository $vehicleRepository, VehicleFactory $vehicleFactory, Environment $twig)
{
parent::__construct($coreFormFactory, $seoMetaTag, $requestStack, $router, $formManager, $em, $apiServer1C, $session, $filesystem, $mediaExtensionVidi, $vehicleRepository, $vehicleFactory, $twig);
}
public function testDriveForm(Request $request): JsonResponse
{
return $this->formManager->saveTestDriveForm($request);
}
public function serviceForm(Request $request): JsonResponse
{
return $this->formManager->saveServiceForm($request, $this->getDealer());
}
public function feedBackForm(Request $request): JsonResponse
{
return $this->formManager->saveFeedbackForm($request, $this->getDealer());
}
public function extendedWarrantyForm(Request $request): JsonResponse
{
return $this->formManager->saveExtendedWarrantyForm($request, $this->getDealer());
}
public function orderCallForm(Request $request): JsonResponse
{
return $this->formManager->saveCallbackForm($request, $this->getDealer());
}
public function buyForm(Request $request): JsonResponse
{
return $this->formManager->saveBuyCarForm($request);
}
public function buyUsedCar(Request $request): JsonResponse
{
return $this->formManager->saveBuyUsedCarForm($request);
}
public function buyInStockForm(Request $request): JsonResponse
{
$data = $request->request->get('buy_in_stock');
$carId = $data['car'] ?? false;
$car = $this->em->getRepository(InStock::class)->find($carId);
if (!$car) {
$car = $this->em->getRepository(Vehicle::class)->find($carId);
if ($car && !$car->getIsUsed()) {
$car = null;
}
}
return $this->formManager->saveBuyInStockCarForm($request, $this->getDealer(), $car);
}
public function captchaInit(Request $request, SessionInterface $session): JsonResponse
{
$type = $request->request->get('type');
$types = $request->request->all('types');
if ($type) {
$key = md5($type . time());
$token = md5('ti_form_key' . time() . 'salt_rs5##%frsgh');
$session->set($key, $token);
return new JsonResponse(['token' => $key . '#' . $token]);
}
$result = [];
if ($types) {
foreach ($types as $type) {
$key = md5($type . time());
$token = md5('ti_form_key' . time() . 'salt_rs5##%frsgh');
$session->set($key, $token);
$result[$type] = $key . '#' . $token;
}
}
return new JsonResponse(['tokens' => $result]);
}
public function tradeInForm(Request $request): JsonResponse
{
return $this->formManager->saveTradeInForm($request, $this->getDealer());
}
public function creditForm(Request $request): JsonResponse
{
return $this->formManager->saveCreditForm($request, $this->getDealer());
}
public function buyPartsForm(Request $request): JsonResponse
{
$dealerId = $request->get('buy_parts')['dealer'];
if ($dealerId) {
$dealer = $this->em->getRepository(Dealer::class)->find($dealerId);
} else {
$dealer = $this->getDealer();
}
return $this->formManager->saveBuyPartsForm($request, $dealer);
}
public function VacancyForm(Request $request): JsonResponse
{
$dealerId = $request->get('dealerId');
$dealer = null;
if ($dealerId) {
$dealer = $this->getDealer();
}
return $this->formManager->saveVacancyForm($request, $dealer);
}
public function servicesOrderForm(Request $request): JsonResponse
{
$servicesType = $request->get('services_order')['service_type'];
return $this->formManager->saveServiceOrderForm($request, $this->getDealer(), $servicesType);
}
public function repairCalcSave(Request $request): JsonResponse
{
$dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
$Form = new Forms();
$parts = $request->request->get('selectedParts');
$type = $request->request->get('carType');
$Form->setDateCreate(new DateTime());
$Form->setDealer($dealer);
$Form->setDomain($request->getHost());
$Form->setType(FormManager::TYPE_REPAIR_CALC);
$Form->setPhone($request->request->get('phone'));
$Form->setEmail($request->request->get('email'));
$Form->setName($request->request->get('name'));
$Form->setData(json_encode([
'parts' => $parts,
'car_type' => $type,
'amount' => $request->request->get('amount'),
]));
$this->em->persist($Form);
$this->em->flush($Form);
return $this->json(['success' => true]);
}
public function repairPhotoSave(Request $request): JsonResponse
{
$dealerId = $request->get('dealerId');
//TODO remove dealer hard code
try {
$dealer = $this->getDealer();
} catch (Exception $e) {
$dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
}
if (!in_array($dealer->getId(), [32, 33])) {
$dealer = $this->em->getRepository(Dealer::class)->findOneBy(['unique_id' => self::BODY_REPAIR_UNIQUE_ID]);
}
return $this->formManager->saveRepairPhoto($request, $dealer);
}
public function EventForm(Request $request, MailerInterface $mailer): JsonResponse
{
$id = $request->get('eventId');
$email = $request->get('email');
$event = $this->em->getRepository(Events::class)->find($id);
$message = (new Email())
->subject('kyiv-west.lexus.ua | ' . $event->getName($request->getLocale()))
->from('info@vidi.ua')
->to($email)
->html($this->renderView('@DcSite/Emails/event_to_email.html.twig', ['event' => $event]));
if (!$mailer->send($message)) {
return $this->json(['success' => false]);
}
return $this->json(['success' => true]);
}
public function rentForm(Request $request): JsonResponse
{
return $this->formManager->saveRentForm($request, $this->getDealer());
}
public function personalSave(Request $request): JsonResponse
{
return $this->formManager->savePersonal($request, $this->getDealer());
}
public function findPartSave(Request $request): JsonResponse
{
return $this->formManager->saveFindPart($request, $this->getDealer());
}
public function orderGoodsForm(Request $request): JsonResponse
{
return $this->formManager->saveOrderGoodsForm($request, $this->getDealer());
}
public function insuranceExtendSave(Request $request): JsonResponse
{
try {
$dealer = $this->getDealer();
} catch (Exception $e) {
$dealer = $this->em->getRepository(Dealer::class)->find(self::INSURANCE_DEALER);
}
return $this->formManager->saveInsuranceExtend($request, $dealer);
}
public function commissionTechnologySave(Request $request): JsonResponse
{
return $this->formManager->saveCommissionTechnology($request, $this->getDealer());
}
public function buySpareParts(Request $request): JsonResponse
{
return $this->formManager->saveBuySpareParts($request, $this->getDealer());
}
public function tiresConfigurator(Request $request): JsonResponse
{
return $this->formManager->saveTiresConfigurator($request, $this->getDealer());
}
public function corpSales(Request $request): JsonResponse
{
return $this->formManager->saveCorpSalesForm($request, $this->getDealer());
}
public function leasingSave(Request $request): JsonResponse
{
try {
$dealer = $this->getDealer();
} catch (Exception $e) {
$dealer = $this->em->getRepository(Dealer::class)->find(36);
}
$response = $this->formManager->saveLeasingForm($request, $dealer);
$responseData = json_decode($response->getContent(), true);
if ($responseData['success']) {
$leasing = $request->request->all('leasing');
$leasingPhone = $leasing['phone'];
$leasingPhone = preg_replace('/\D+/', '', $leasingPhone);
$this->em->getRepository(LeasingCalcLog::class)
->updateFormByPhone($leasingPhone, $responseData['form_id']);
}
return $response;
}
public function feadBackForm(Request $request): JsonResponse
{
return $this->formManager->saveFeedbackForm($request, $this->getDealer());
}
public function motoTestDrive(Request $request): JsonResponse
{
return $this->formManager->saveMotoTestDriveForm($request, $this->getDealer());
}
public function waterTestDrive(Request $request): JsonResponse
{
$data = $request->request->get('water_test_drive');
$vehicle = $data['vehicle'];
$vehicle = $this->em->getRepository(Vehicle::class)->find($vehicle);
return $this->formManager->saveWaterTestDriveForm($request, $this->getDealer(), $vehicle);
}
public function OilTOForm(Request $request): JsonResponse
{
return $this->formManager->saveOilTOForm($request, $this->getDealer());
}
public function ServiceCampaingCarForm(Request $request): JsonResponse
{
return $this->formManager->saveServiceCampaingCarForm($request, $this->getDealer());
}
public function saveDesignForm(Request $request): JsonResponse
{
$data = $request->request->get('save_design');
$vehicle = $data['vehicle'];
$vehicle = $this->em->getRepository(Vehicle::class)->find($vehicle);
return $this->formManager->saveSaveDesignForm($request, $this->getDealer(), $vehicle);
}
public function saveSendQuestionForm(Request $request): JsonResponse
{
return $this->formManager->saveSendQuestionForm($request, $this->getDealer());
}
public function saveSendCarQuestionForm(Request $request): JsonResponse
{
$requestData = $request->request->get('send_question', []);
$requestData['select_subject_question'] = 8;
$request->request->set('send_question', $requestData);
return $this->formManager->saveSendQuestionForm($request, $this->getDealer());
}
public function saveOnlineServiceRegistrationForm(Request $request): JsonResponse
{
return $this->formManager->saveOnlineServiceRegistrationForm($request, $this->getDealer());
}
public function saveWithoutPay(Request $request): JsonResponse
{
if (!$this->getUser()) {
return $this->json(['success' => false, 'error' => 'Авторизуйтесь для створення замовлення']);
}
$Basket = $this->em->getRepository(Basket::class)->findBy(['dealer' => $this->getDealer(), 'user' => $this->getUser(), 'status' => Basket::STATUS_NEW]);
if (count($Basket) < 1) {
return new JsonResponse(['success' => false, 'error' => 'Кошик пустий']);
}
foreach ($Basket as $item) {
$item->setStatus(Basket::STATUS_WITHOUT_PAYED_PENDING);
$item->setUpdatedAt(new DateTime());
$this->em->persist($item);
$this->em->flush();
}
return $this->formManager->saveWithoutPayOrderForm($request, $this->getDealer(), $this->getUser());
}
public function callMeForm(Request $request): JsonResponse
{
return $this->formManager->saveCallMeForm($request, $request->get('formType') ?? FormManager::TYPE_CREDIT_FORM);
}
public function callMeFormWithDealers(Request $request): JsonResponse
{
return $this->formManager->saveCallMeFormWithDealers($request);
}
public function tiresHotelForm(Request $request): JsonResponse
{
$dealer = $this->em->getRepository(Dealer::class)->findOneBy(['id' => $request->get('tires_hotel')['dealers']]);
return $this->formManager->saveTiresHotelForm($request, $dealer);
}
public function serviceConsultForm(Request $request): JsonResponse
{
$dealer = $this->em->getRepository(Dealer::class)->findOneBy(['id' => $request->get('service_consult')['services']]);
return $this->formManager->saveServiceConsultForm($request, $request->get('formType') ?? FormManager::TYPE_SERVICE_FORM, $dealer);
}
}