<?php
namespace App\Controller;
use App\Entity\BankAccount;
use App\Entity\Company;
use App\Entity\PotentialCustomerCompany;
use App\Exception\AccessDeniedException;
use App\Form\Type\CompanyType;
use App\Form\Type\PotentialCustomerCompanyType;
use App\Service\CompanyService;
use App\Service\PotentialCustomerCompanyService;
use Exception;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route(
* "/sales-journals"
* )
*/
class SalesJournalController extends AbstractController
{
/**
* @var PotentialCustomerCompanyService
*/
protected PotentialCustomerCompanyService $companyService;
/**
* @var CompanyService
*/
protected CompanyService $varService;
/**
* @param PotentialCustomerCompanyService $companyService
* @param CompanyService $varService
*/
public function __construct(
PotentialCustomerCompanyService $companyService,
CompanyService $varService
) {
$this->companyService = $companyService;
$this->varService = $varService;
}
/**
* @Route(
* "/create",
* name="app.sales_journal.create"
* )
*
* @param Request $request
*
* @return Response
*
* @throws AccessDeniedException
*/
public function createAction(Request $request): Response
{
$company = new PotentialCustomerCompany();
$form = $this->createForm(
PotentialCustomerCompanyType::class,
$company,
[
'action' => $this->generateUrl(
'app.sales_journal.create'
),
]
);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
try {
$company = $form->getData();
$this->companyService->create($company);
$this->flashSuccess('ui.success.update', [], 'PotentialCustomerCompany');
return $this->redirectResponse(
'app.sales_journal.index',
[],
'company-' . $company->getId()
);
} catch (Exception $e) {
$this->flashError('ui.error.update', [], 'PotentialCustomerCompany');
if ($this->getCurrentUser()->isSuperAdmin()) {
$this->flashError($e->getMessage());
}
}
}
}
return $this->render(
'SalesJournal/create.html.twig',
[
'form' => $form->createView(),
]
);
}
/**
* @Route(
* "/{company}/create-var",
* name="app.sales_journal.create_var",
* requirements={"company" = "\d+"}
* )
*
* @param Request $request
* @param PotentialCustomerCompany $company
*
* @return Response
*
* @throws AccessDeniedException
*/
public function createVarAction(Request $request, PotentialCustomerCompany $company): Response
{
$var = new Company($company->getName());
$this->varService->assertCreate($var);
$form = $this->createForm(
CompanyType::class,
$var,
[
'action' => $this->generateUrl(
'app.sales_journal.create_var',
[
'company' => $company->getId(),
]
),
]
);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
try {
$company->setCompany($var);
$this->companyService->update($company);
$this->flashSuccess('ui.success.update', [], 'Company');
return $this->redirectResponse(
'app.sales_journal.index',
[],
'company-' . $company->getId()
);
} catch (Exception $e) {
$this->flashError('ui.error.update', [], 'Company');
if ($this->getCurrentUser()->isSuperAdmin()) {
$this->flashError($e->getMessage());
}
}
}
}
return $this->render(
'SalesJournal/createVar.html.twig',
[
'form' => $form->createView(),
'company' => $company,
]
);
}
/**
* @Route(
* "/{company}/delete",
* name="app.sales_journal.delete",
* requirements={"company" = "\d+"}
* )
*
* @param PotentialCustomerCompany $company
*
* @return RedirectResponse
*
* @throws AccessDeniedException
*/
public function deleteAction(PotentialCustomerCompany $company): RedirectResponse
{
try {
$this->companyService->delete($company);
$this->flashSuccess('ui.success.delete', [], 'PotentialCustomerCompany');
} catch (Exception $e) {
$this->flashError('ui.error.delete', [], 'PotentialCustomerCompany');
if ($this->getCurrentUser()->isSuperAdmin()) {
$this->flashError($e->getMessage());
}
}
return $this->redirectResponse('app.sales_journal.index');
}
/**
* @Route(
* "/",
* name="app.sales_journal.index"
* )
*
* @return Response
*/
public function indexAction(): Response
{
return $this->render(
'SalesJournal/index.html.twig',
[
'companies' => $this->companyService->getAll(),
'newCompany' => new PotentialCustomerCompany(),
'newVar' => new Company(''),
]
);
}
/**
* @Route(
* "/{company}/print",
* name="app.sales_journal.print",
* requirements={"company" = "\d+"}
* )
*
* @param PotentialCustomerCompany $company
*
* @return Response
*/
public function printAction(PotentialCustomerCompany $company): Response
{
return $this->render(
'SalesJournal/print.html.twig',
[
'company' => $company,
]
);
}
/**
* @Route(
* "/print",
* name="app.sales_journal.print_all"
* )
*
* @return Response
*/
public function printAllAction(): Response
{
return $this->render(
'SalesJournal/printAll.html.twig',
[
'companies' => $this->companyService->getAll(),
]
);
}
/**
* @Route(
* "/{company}/update",
* name="app.sales_journal.update",
* requirements={"company" = "\d+"}
* )
*
* @param Request $request
* @param PotentialCustomerCompany $company
*
* @return Response
*
* @throws AccessDeniedException
*/
public function updateAction(Request $request, PotentialCustomerCompany $company): Response
{
$form = $this->createForm(
PotentialCustomerCompanyType::class,
$company,
[
'action' => $this->generateUrl(
'app.sales_journal.update',
[
'company' => $company->getId(),
]
),
]
);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
try {
$this->companyService->update($company);
$this->flashSuccess('ui.success.update', [], 'PotentialCustomerCompany');
return $this->redirectResponse(
'app.sales_journal.index',
[],
'company-' . $company->getId()
);
} catch (Exception $e) {
$this->flashError('ui.error.update', [], 'PotentialCustomerCompany');
if ($this->getCurrentUser()->isSuperAdmin()) {
$this->flashError($e->getMessage());
}
}
}
}
return $this->render(
'SalesJournal/update.html.twig',
[
'company' => $company,
'form' => $form->createView(),
]
);
}
}