<?php
declare(strict_types=1);
namespace App\Admin\Controller;
use App\Entity\AdmUser;
use App\Entity\Client;
use App\Entity\Type\JobTitleType;
use App\Repository\ClientRepository;
use Doctrine\ORM\EntityManagerInterface;
use Sonata\AdminBundle\Controller\CRUDController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ClientAdminController extends CRUDController
{
private ClientRepository $clientRepository;
private EntityManagerInterface $entityManager;
public function __construct( ClientRepository $clientRepository, EntityManagerInterface $entityManager)
{
$this->clientRepository = $clientRepository;
$this->entityManager = $entityManager;
}
public function SigningContractAction(Request $request): Response
{
/** @var Client $client */
$client = $this->clientRepository->find($request->get('id'));
$client->setDateSigningContract(new \DateTime());
$this->entityManager->flush();
return $this->renderWithExtraParams('admin/Document/contract.html.twig', $this->normalizeDocumentData($client));
}
public function ShowContractAction(Request $request): Response
{
/** @var Client $client */
$client = $this->clientRepository->find($request->get('id'));
$client->setDateSigningContract(new \DateTime());
return $this->renderWithExtraParams('admin/Document/contract.html.twig', $this->normalizeDocumentData($client));
}
///TODO в отдельный нормалайзер, есть дубль
private function normalizeDocumentData(Client $client): array
{
/** @var AdmUser $amin */
$amin = $this->getUser();
if ($amin->getLastname() === 'Петриков') {
$lastName = 'Петрикова';
} else {
$lastName = $amin->getLastname();
}
return [
'contract' => [
'number' => $client->getUserNumber(),
'dateSigningContract' => $client->getDateSigningContract()->format('d.m.Y'),
],
'client' => [
'fio' => $client->getFio(),
'dateOfBirth' => $client->getDateOfBirth() ? $client->getDateOfBirth()->format('d.m.Y') : null,
'phone' => $client->getPhone()
],
'passport' => [
'number' => $client->getPassportNumber(),
'id' => $client->getPassportId(),
'issueDate' => $client->getPassportIssueDate()->format('d.m.Y'),
'passportIssuingAuthority' => $client->getPassportIssuingAuthority(),
'registrationAddress' => $client->getRegistrationAddress()
],
'admin' => [
'fioFull' => $lastName . ' ' . $amin->getFirstname(). ' ' . $amin->getMiddleName(),
'fioSmall' => mb_substr($amin->getFirstname(), 0, 1). '.' . mb_substr($amin->getMiddleName(), 0 , 1) . '. ' . $amin->getLastname() ,
'jobTitle' => JobTitleType::RU_VALUES[$amin->getJobTitleType()],
'jobTitleInFace' => JobTitleType::RU_VALUES_IN_FACE[$amin->getJobTitleType()],
'acting' => sprintf(JobTitleType::ACTING[$amin->getJobTitleType()],$amin->getProxyNumber(), $amin->getProxyDate() ? $amin->getProxyDate()->format('d.m.Y') : '' ),
]
];
}
/** @param $object Client */
protected function redirectTo($object)
{
$request = $this->getRequest();
if (null !== $request->get('btn_create_and_write')) {
return $this->redirectToRoute('admin_app_client_signing_contract', ['id' => $object->getId() ]);
}
parent::redirectTo($object);
}
private function getSelectedTab(Request $request): array
{
return array_filter(['_tab' => $request->request->get('_tab')]);
}
}