cmtracker/src/Controller/Case/ReferralController.php
Ryan Prather 51ea4e2311 up: ReferralController
* remove $this->msgs and just call Libs::getMessages method
2025-02-09 18:12:36 -05:00

162 lines
6.4 KiB
PHP

<?php
namespace App\Controller\Case;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Factory\MessageFactory;
use App\Form\ReferralFormType;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
use App\Libs\NavList;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
class ReferralController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = []
) {
$this->navLinks = NavList::LIST;
if (strpos($_SERVER['HTTP_REFERER'], 'my-cases') !== false) {
$this->navLinks['my_cases'] = NavList::PRESENT_LINK;
} else {
$this->navLinks['case_list'] = NavList::PRESENT_LINK;
}
}
#[Route('/list-referrals/{id}', name: 'app_list_referrals')]
public function listReferrals(#[CurrentUser()] User $user, string $id, Request $request): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
$openReferrals = $this->entityManager->getRepository(Referral::class)->getActiveReferrals($case);
$closedReferrals = $this->entityManager->getRepository(Referral::class)->getClosedReferrals($case);
return $this->render(
'internal/cases/referrals/list-referrals.html.twig',
array_merge(
$this->navLinks,
[
'breadcrumbs' => [
(
strpos($request->server->get('HTTP_REFERER'), 'my-cases') !== false
? new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases')
: new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases')
),
new Breadcrumb($this->generateUrl('app_list_referrals', ['id' => $case->getId()]), 'Referrals'),
],
'notifications' => $this->msgs,
'case' => $case,
'openReferrals' => $openReferrals,
'closedReferrals' => $closedReferrals,
]
)
);
}
#[Route('/add-referral/{id}', name: 'app_case_add_referral')]
public function addReferral(Request $request, #[CurrentUser()] User $user, string $id): Response
{
$this->denyAccessUnlessGranted(['ROLE_ADMIN', 'ROLE_CASE_MANAGER']);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
/** @var UserCase $uc */
$uc = $this->entityManager->getRepository(UserCase::class)->findBy(['memberCase' => $case]);
$referral = new Referral();
$form = $this->createForm(ReferralFormType::class, $referral);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$referral = $form->getData();
$referral->setMemberCase($case);
$msg = MessageFactory::createReferral($user, $uc->getUser(), $case);
$this->entityManager->persist($msg);
$this->entityManager->persist($referral);
$this->entityManager->flush();
return $this->redirectToRoute('app_list_referrals', ['id' => $case->getId()]);
}
return $this->render(
'internal/cases/referrals/add-referral.html.twig',
array_merge(
$this->navLinks,
[
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_list_referrals', ['id' => $case->getId()]), 'Referrals'),
new Breadcrumb($this->generateUrl('app_case_add_referral', ['id' => $case->getId()]), 'Add Referral')
],
'notifications' => $this->msgs,
'case' => $case,
'form' => $form,
]
)
);
}
#[Route('/case/{caseId}/edit-referral/{referralId}', name: 'app_case_edit_referral')]
public function editReferral(Request $request, #[CurrentUser()] User $user, string $caseId, string $referralId): Response
{
$this->denyAccessUnlessGranted(['ROLE_ADMIN', 'ROLE_CASE_MANAGER']);
$referral = $this->entityManager->getRepository(Referral::class)->find($referralId);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
/** @var UserCase $uc */
$uc = $this->entityManager->getRepository(UserCase::class)->findBy(['case' => $case]);
$form = $this->createForm(ReferralFormType::class, $referral);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$referral = $form->getData();
$msg = MessageFactory::createReferral($user, $uc->getUser(), $case);
$this->entityManager->persist($msg);
$this->entityManager->flush();
return $this->redirectToRoute('app_list_referrals', ['id' => $case->getId()]);
}
return $this->render(
'internal/cases/referrals/edit-referral.html.twig',
array_merge(
$this->navLinks,
[
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_list_referrals', ['id' => $case->getId()]), 'Referrals'),
new Breadcrumb($this->generateUrl('app_case_edit_referral', ['caseId' => $case->getId(), 'referralId' => $referral->getId()]), 'Edit Referral'),
],
'notifications' => Libs::getMessages($user, $this->entityManager),
'case' => $case,
'form' => $form,
'referral' => $referral,
]
)
);
}
}