Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Controller/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Controller/MemberFirmTransformationPortalController.php

<?php

namespace App\MemberBundle\Controller;

use App\MemberBundle\Form\Type\MemberFirmTransformationPortalType;
use App\MemberBundle\Service\MemberFirmTransformationPortalService;
use App\UserBundle\Entity\UserList;
use App\UserBundle\Entity\UserLogin;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;

/**
 * Member portal transformation declaration (member firm users).
 */
class MemberFirmTransformationPortalController extends AbstractController
{
    #[Route('/member-firm/transformation', name: 'member_firm_transformation_form', methods: ['GET', 'POST'])]
    #[IsGranted('ROLE_MEMBER_FIRM')]
    public function edit(
        Request $request,
        MemberFirmTransformationPortalService $portalService,
    ): Response {
        $user = $this->getUser();
        if (!$user instanceof UserList && !$user instanceof UserLogin) {
            throw $this->createAccessDeniedException();
        }

        $contact = $portalService->resolvePortalContact($user);
        if ($contact === null) {
            throw $this->createAccessDeniedException(
                'Your login is not linked to a current CESA member firm contact record.'
            );
        }

        $firm = $portalService->getMemberFirmForContact($contact);
        if ($firm === null) {
            throw $this->createAccessDeniedException('Your contact record is not linked to a member firm.');
        }

        $declaration = $portalService->prepareDeclarationCapture($firm);

        $form = $this->createForm(MemberFirmTransformationPortalType::class, $declaration->capture);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            /** @var \App\MemberBundle\Form\Model\MemberFirmTransformationCapture $data */
            $data = $form->getData();
            $portalService->saveDeclaration($firm, $data);
            $this->addFlash(
                'success',
                sprintf('Transformation declaration for %d has been saved.', $declaration->declarationYear),
            );

            return $this->redirectToRoute('member_firm_transformation_form');
        }

        return $this->render('@MemberBundle/Portal/transformation_edit.html.twig', [
            'form' => $form,
            'firmName' => $firm->getFirmName(),
            'contactName' => trim(($contact->getContactFirstName() ?? '').' '.($contact->getContactSurname() ?? '')),
            'declarationYear' => $declaration->declarationYear,
            'prefilledFromYear' => $declaration->prefilledFromYear,
            'hasCurrentYearDeclaration' => $declaration->hasCurrentYearDeclaration,
        ]);
    }
}