<?php
namespace App\Controller\Web;
use App\Entity\Customer;
use App\Entity\User;
use App\Form\CustomerType;
use App\Repository\CustomerRepository;
use App\Repository\UserRepository;
use App\Services\GeneratorService;
use Doctrine\ORM\ORMException;
use GuzzleHttp\Exception\GuzzleException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class CustomerController extends AbstractController
{
private UserRepository $userRepository;
private CustomerRepository $customerRepository;
private GeneratorService $generatorService;
/**
* @param UserRepository $userRepository
* @param CustomerRepository $customerRepository
* @param GeneratorService $generatorService
*/
public function __construct(
UserRepository $userRepository,
CustomerRepository $customerRepository,
GeneratorService $generatorService
) {
$this->userRepository = $userRepository;
$this->customerRepository = $customerRepository;
$this->generatorService = $generatorService;
}
/**
* @Route("/generator/add-new-customer", name="add_new_customer", options={"expose"=true})
* @param Request $request
* @return RedirectResponse|Response
* @throws ORMException
* @throws GuzzleException
*/
public function addNewCustomer(Request $request): RedirectResponse|Response
{
/** @var User $user */
$user = $this->getUser();
$allUsers = $this->userRepository->findAllEnableUsers();
$customer = new Customer();
$form = $this->createForm(
CustomerType::class,
$customer,
[
'method' => 'POST',
'user' => $allUsers
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$customer = $form->getData();
$customer->setCreatedAt(new \DateTime());
$customer->setEFakture($this->generatorService->isUserOnEfakture($customer->getPib()));
$this->customerRepository->save($customer);
$this->addFlash('success', 'Uspešno ste dodali korisnika.');
return $this->redirect($this->generateUrl('generator'));
}
return $this->render(
'@views/Customer/addNewCustomer.html.twig',
[
'form' => $form->createView(),
]
);
}
/**
* @Route("/left-sms-messages", name="number_of_left_sms_messages", options={"expose"=true})
* @param Request $request
* @return RedirectResponse|Response
* @throws ORMException
*/
public function numberOfLeftSmsMessages(Request $request)
{
/** @var User $user */
$user = $this->getUser();
if ($user->getMainUser()) {
$user = $user->getMainUser();
}
/** @var Customer|null $customer */
$customer = $this->customerRepository->findOneBy(['user' => $user]);
return new JsonResponse([
'success' => true,
'leftSms' => $customer?->getNumberOfLeftMessages() ?? 0,
]);
}
}