<?php
namespace App\Controller;
use App\Entity\Customer;
use App\Entity\CustomerGarage;
use App\Entity\Lead;
use App\Entity\MangoCall;
use App\Repository\CustomerGarageRepository;
use App\Repository\CustomerRepository;
use App\Repository\LeadRepository;
use App\Repository\MangoCallRepository;
use App\Service\Api;
use App\Service\CreateLead;
use App\Service\DTO\LeadDTO;
use App\Service\Helper\PhoneHelper;
use App\Service\Helper\RequestHelper;
use DateTime;
use Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
/**
* @Route("/lead")
*/
class LeadController extends BaseController
{
/**
* @Route("/list", methods="GET")
* @throws Exception
*/
public function leadsList(Request $request, LeadRepository $leadRepository): JsonResponse
{
return new JsonResponse(LeadDTO::getLeadsList(...$leadRepository->getList((new DateTime($request->query->get('from')))->setTime(0, 0), (new DateTime($request->query->get('to')))->setTime(23, 59,59), $request->query->get('phone'))));
}
/**
* @Route("/{lead}/data", methods="GET")
* @throws Exception
*/
public function data(Request $request, Lead $lead, LeadRepository $leadRepository): JsonResponse
{
return new JsonResponse(LeadDTO::getLead($lead));
}
/**
* @Route("/create_from_call", methods="POST")
* @throws Exception
* @throws TransportExceptionInterface
*/
public function createLeadFromCall(
Request $request,
CustomerGarageRepository $customerGarageRepository,
CustomerRepository $customerRepository,
MangoCallRepository $mangoCallRepository,
Api $apiService,
CreateLead $createLeadService
): JsonResponse
{
$phone = PhoneHelper::getNormalizePhone(RequestHelper::get($request, 'phone'));
$carBrand = RequestHelper::get($request, 'carBrand');
$carModel = RequestHelper::get($request, 'carModel');
$carVin = RequestHelper::get($request, 'carVin');
$mangoCallId = RequestHelper::getInt($request, 'currentCallId');
/** @var MangoCall $mangoCall */
$mangoCall = $mangoCallRepository->find($mangoCallId);
$customer = $customerRepository->findOneBy(['phone' => $phone]);
$customer = $customer ?: $customerRepository->addCustomer($phone);
$garageId = RequestHelper::getInt($request, 'garageId');
if($garageId) {
/** @var CustomerGarage $customerGarage */
$customerGarage = $customerGarageRepository->find($garageId);
if($carBrand || $carModel || $carVin) {
$customerGarageRepository->update(
$customerGarage
->setCarBrand($carBrand)
->setCarModel($carModel)
->setCarVin($carVin)
);
}
} else {
$customerGarageRepository->save(
new CustomerGarage($carBrand, $carModel, $carVin, $customer)
);
}
$lead = $createLeadService->executeCreateLead(
$customer,
RequestHelper::get($request, 'customerFirstName'),
RequestHelper::get($request, 'customerFatherName'),
RequestHelper::get($request, 'customerSureName'),
RequestHelper::get($request, 'town'),
$carBrand,
$carModel,
$carVin,
RequestHelper::get($request, 'comment'),
$this->findUserByCookie($request->cookies->get('user')),
$mangoCall
);
if($mangoCall) {
$apiService->updateMangoClient($lead->getCustomer());
$mangoCallRepository->update($mangoCall->setLead($lead));
}
return new JsonResponse(['id' => $lead->getId(), 'deprecatedOrderId'=> $lead->getDeprecatedOrderId()]);
}
}