add docs for the case

This commit is contained in:
2025-01-11 22:30:54 -05:00
parent 74e811e950
commit 1cb6bedb5c
18 changed files with 398 additions and 422 deletions

View File

@ -2,18 +2,16 @@
namespace App\Controller;
use App\Entity\CompanyDocument;
use App\Entity\Messages;
use App\Entity\Supervision;
use App\Entity\User;
use App\Factory\MessageFactory;
use App\Form\CompanyDocumentFormType;
use App\Form\EditUserFormType;
use App\Form\SupervisorFormType;
use App\Form\UserFormType;
use App\Libs\Breadcrumb;
use App\Libs\NavList;
use App\Libs\Libs;
use App\Libs\PageParameters;
use App\Repository\UserRepository;
use DateTime;
use DateTimeZone;
@ -30,12 +28,10 @@ use Symfony\Component\String\Slugger\SluggerInterface;
#[IsGranted('ROLE_ADMIN')]
class AdminController extends AbstractController
{
private array $msgs;
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly UserPasswordHasherInterface $userPasswordHasher,
private array $navLinks = []
private array $navLinks = [],
) {
$this->navLinks = NavList::LIST;
}
@ -45,7 +41,6 @@ class AdminController extends AbstractController
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->navLinks['admin_dashboard'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
return $this->render(
'internal/admin/admin-dashboard.html.twig',
@ -55,7 +50,7 @@ class AdminController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_admin_dashboard'), 'Admin Dashboard')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -65,7 +60,6 @@ class AdminController extends AbstractController
public function listUsers(#[CurrentUser()] User $user): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->msgs = Libs::getMessages($user, $this->entityManager);
/** @var UserRepository $repo */
$repo = $this->entityManager->getRepository(User::class);
@ -89,7 +83,7 @@ class AdminController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_users'), 'List Users')
],
'users' => $users,
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -102,7 +96,6 @@ class AdminController extends AbstractController
SluggerInterface $slugger
): Response {
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->msgs = Libs::getMessages($admin, $this->entityManager);
$user = new User();
$form = $this->createForm(UserFormType::class, $user);
@ -183,7 +176,7 @@ class AdminController extends AbstractController
new Breadcrumb($this->generateUrl('app_add_user'), 'Add User')
],
'form' => $form,
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
]
)
);
@ -194,7 +187,6 @@ class AdminController extends AbstractController
{
/** @var UserRepository $userRepo */
$userRepo = $this->entityManager->getRepository(User::class);
$this->msgs = Libs::getMessages($admin, $this->entityManager);
/** @var User $user */
$user = $userRepo->find($id);
@ -231,7 +223,7 @@ class AdminController extends AbstractController
],
'data' => $user,
'form' => $form,
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
]
)
);
@ -242,7 +234,6 @@ class AdminController extends AbstractController
{
/** @var UserRepository $userRepo */
$userRepo = $this->entityManager->getRepository(User::class);
$this->msgs = Libs::getMessages($admin, $this->entityManager);
/** @var User $user */
$user = $userRepo->find($id);
@ -286,7 +277,7 @@ class AdminController extends AbstractController
'user' => $user,
'form' => $form,
'supervisors' => $userRepo->getCaseManagers($admin->getCompany()),
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
]
)
);

View File

@ -8,7 +8,6 @@ use App\Entity\CompanyDocument;
use App\Entity\Location;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\ReferralSource;
use App\Entity\User;
use App\Entity\UserCase;
@ -29,13 +28,6 @@ use Symfony\Component\Security\Http\Attribute\CurrentUser;
class CaseController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = []
@ -48,10 +40,9 @@ class CaseController extends AbstractController
public function myCases(#[CurrentUser()] User $user, Request $request): Response
{
$this->navLinks['my_cases'] = NavList::PRESENT_LINK;
$this->navLinks['case_list'] = 'nav-link text-dark';
$this->navLinks['case_list'] = NavList::DEFAULT;
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$cases = [];
foreach ($ucs as $uc) {
@ -71,7 +62,7 @@ class CaseController extends AbstractController
: new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases')
),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'cases' => $cases,
]
)
@ -85,7 +76,6 @@ class CaseController extends AbstractController
$cases = $this->entityManager->getRepository(MemberCase::class)->findAll();
$workers = $this->entityManager->getRepository(User::class)->getCaseWorkers();
$this->msgs = Libs::getMessages($user, $this->entityManager);
return $this->render(
'internal/admin/cases/list-cases.html.twig',
@ -95,7 +85,7 @@ class CaseController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'cases' => $cases,
'workers' => $workers,
]
@ -115,8 +105,6 @@ class CaseController extends AbstractController
$compDocs = $this->entityManager->getRepository(CompanyDocument::class)->findBy(['company' => $user->getCompany()]);
$sources = $this->entityManager->getRepository(ReferralSource::class)->findAll();
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($this->getUser());
return $this->render(
'internal/cases/view-case.html.twig',
array_merge(
@ -130,7 +118,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_view_case', ['caseId' => $case->getId()]), 'View Case')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -140,7 +128,6 @@ class CaseController extends AbstractController
public function addCase(Request $request, #[CurrentUser()] User $admin): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($admin);
$companyDocs = $this->entityManager->getRepository(CompanyDocument::class)->findBy(['company' => $admin->getCompany()]);
$case = new MemberCase();
@ -169,7 +156,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_add_case'), 'Add Case')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
'form' => $form,
'sources' => $this->entityManager->getRepository(ReferralSource::class)->retrieveOrderedList(),
'docs' => $companyDocs,
@ -182,7 +169,6 @@ class CaseController extends AbstractController
public function editCase(Request $request, #[CurrentUser()] User $admin, string $id): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($admin);
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
$form = $this->createForm(MemberCaseFormType::class, $case);
@ -208,7 +194,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_edit_case', ['id' => $id]), 'Edit Case')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
'form' => $form,
'case' => $case,
'sources' => $this->entityManager->getRepository(ReferralSource::class)->retrieveOrderedList(),
@ -221,7 +207,6 @@ class CaseController extends AbstractController
public function assignCase(string $id, Request $request, #[CurrentUser()] User $admin): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($admin);
$caseWorkers = $this->entityManager->getRepository(User::class)->getCaseWorkers();
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
@ -263,7 +248,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_assign_case', ['id' => $id]), 'Assign User')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($admin, $this->entityManager),
'case' => $case,
'form' => $form,
'id' => $id,
@ -281,7 +266,6 @@ class CaseController extends AbstractController
$this->navLinks['case_list'] = 'nav-link text-dark';
$addresses = $this->entityManager->getRepository(Location::class)->getUserLocations($user);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
$cases = [];
@ -300,7 +284,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases'),
new Breadcrumb($this->generateUrl('app_list_case_addresses'), 'List Case Addresses')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'addresses' => $addresses,
'cases' => $cases,
]
@ -314,8 +298,6 @@ class CaseController extends AbstractController
$this->navLinks['case_itinerary'] = NavList::PRESENT_LINK;
$this->navLinks['case_list'] = 'nav-link text-dark';
$this->msgs = Libs::getMessages($user, $this->entityManager);
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
$cases = [];
@ -365,7 +347,7 @@ class CaseController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_case_addresses'), 'List Addresses'),
new Breadcrumb($this->generateUrl('app_case_add_address'), 'Add Case Address')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'form' => $form,
'cases' => $cases,
]
@ -374,13 +356,11 @@ class CaseController extends AbstractController
}
#[Route('/addresses/edit/{id}', name: 'app_case_edit_address')]
public function editCaseAddress(Request $request, string $id): Response
public function editCaseAddress(Request $request, string $id, #[CurrentUser()] User $user): Response
{
$this->navLinks['case_itinerary'] = NavList::PRESENT_LINK;
$this->navLinks['case_list'] = 'nav-link text-dark';
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($this->getUser());
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $this->getUser()]);
$lcs = $this->entityManager->getRepository(CaseLocation::class)->findBy(['location' => $id]);
@ -424,7 +404,7 @@ class CaseController extends AbstractController
'cases' => $cases,
'inCases' => $inCases,
'form' => $form,
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -433,7 +413,6 @@ class CaseController extends AbstractController
#[Route('/assign-case-doc/{caseId}/{memberId}', name: 'app_assign_case_documents')]
public function assignCaseDocument(string $caseId, string $memberId, Request $request, #[CurrentUser()] User $user): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$member = $this->entityManager->getRepository(Member::class)->find($memberId);
$companyDocs = $this->entityManager->getRepository(CompanyDocument::class)->findBy(['company' => $user->getCompany()]);
@ -457,7 +436,7 @@ class CaseController extends AbstractController
array_merge(
$this->navLinks,
[
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_dashboard'), 'Dashboard'),
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
@ -470,8 +449,6 @@ class CaseController extends AbstractController
]
)
);
return new Response();
}
#[Route('/sign-case-doc/{caseId}/{docId}/{memberId}', name: 'app_display_case_document')]
@ -479,49 +456,4 @@ class CaseController extends AbstractController
{
return new Response();
}
#[Route('/api/filter-address-by-case/{caseId}', name: 'ajax_filter_address_by_case')]
public function filterAddressByCase(string $caseId, Request $request): Response
{
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$addresses = $this->entityManager->getRepository(Location::class)->getLocationsByCase($case);
return $this->json($addresses);
}
#[Route('/api/case/{caseId}/user/{userId}', name: 'ajax_case_user_level_check')]
public function checkUserCaseLevel(string $caseId, string $userId) : Response
{
$ret = true;
$user = $this->entityManager->getRepository(User::class)->find($userId);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$res = UserCase::checkLevel($user, $case);
if (!$res) {
$ret = [
'userLevel' => ucwords(str_replace('_', ' ', strtolower($user->getLevel()->name))),
'caseLevel' => ucwords(str_replace('_', ' ', strtolower($case->getLevel()->name))),
];
}
return $this->json($ret);
}
#[Route('/api/filter-cases-by-user', name: 'ajax_filter_cases_by_user')]
public function filterCasesByUser(Request $request): Response
{
/** @var User $user */
$user = $this->entityManager->getRepository(User::class)->find($request->query->get('userId'));
/** @var UserCase[] $ucs */
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
$ret = [];
foreach ($ucs as $uc) {
$ret[] = $uc->getMemberCase();
}
return $this->json($ret);
}
}

View File

@ -22,13 +22,6 @@ use Symfony\UX\Map\Point;
class CommunityResourceController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
public function __construct(
private readonly EntityManagerInterface $entityManager,
private array $navLinks = []
@ -41,7 +34,6 @@ class CommunityResourceController extends AbstractController
public function list(#[CurrentUser()] User $user): Response
{
$rsc = $this->entityManager->getRepository(CommunityResource::class)->findAll();
$this->msgs = Libs::getMessages($user, $this->entityManager);
return $this->render(
'internal/community_resource/list.html.twig',
@ -52,7 +44,7 @@ class CommunityResourceController extends AbstractController
new Breadcrumb('#', 'Community Resources')
],
'resources' => $rsc,
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -61,8 +53,6 @@ class CommunityResourceController extends AbstractController
#[Route('/resource/map', name: 'app_community_resource_map')]
public function map(#[CurrentUser()] User $user): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$rcs = $this->entityManager->getRepository(CommunityResource::class)->findAll();
$map = new Map('default');
@ -94,7 +84,7 @@ class CommunityResourceController extends AbstractController
new Breadcrumb($this->generateUrl('app_community_resource'), 'List Resources'),
new Breadcrumb('#', 'Community Resources')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -103,8 +93,6 @@ class CommunityResourceController extends AbstractController
#[Route('/resource/add', name: 'app_community_resource_add')]
public function add(#[CurrentUser()] User $user, Request $request): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$form = $this->createForm(ResourceFormType::class);
$form->handleRequest($request);
@ -142,7 +130,7 @@ class CommunityResourceController extends AbstractController
new Breadcrumb($this->generateUrl('app_community_resource'), 'List Resources'),
new Breadcrumb('#', 'Add Resource')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -152,8 +140,6 @@ class CommunityResourceController extends AbstractController
#[Route('/resource/edit/{id}', name: 'app_community_resource_edit')]
public function edit(string $id, #[CurrentUser()] User $user, Request $request): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$rsc = $this->entityManager->getRepository(CommunityResource::class)->find($id);
$form = $this->createForm(ResourceFormType::class, $rsc);
@ -189,7 +175,7 @@ class CommunityResourceController extends AbstractController
new Breadcrumb($this->generateUrl('app_community_resource'), 'List Resources'),
new Breadcrumb('#', 'Edit Resource')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -217,13 +203,4 @@ class CommunityResourceController extends AbstractController
'Content-Transfer-Encoding' => 'binary'
]);
}
#[Route('/api/filter-resource-by-county', name: 'app_api_filter_resource_by_county')]
public function filterResourceByCounty(Request $request): Response
{
$data = json_decode($request->getContent(), true);
$county = $data['county'];
$resources = $this->entityManager->getRepository(CommunityResource::class)->findBy(['county' => $county]);
return $this->json($resources);
}
}

View File

@ -24,8 +24,6 @@ use Symfony\Component\String\Slugger\SluggerInterface;
#[IsGranted('ROLE_ADMIN')]
class CompanyController extends AbstractController
{
private array $msgs;
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = []
@ -40,7 +38,6 @@ class CompanyController extends AbstractController
SluggerInterface $slugger
): Response {
$this->navLinks['company_nav'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
$company = $user->getCompany();
$form = $this->createForm(InternalCompanyFormType::class, $company);
@ -78,7 +75,7 @@ class CompanyController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_admin_dashboard'), "Admin Dashboard"),
],
'msgs' => $this->msgs,
'msgs' => Libs::getMessages($user, $this->entityManager),
]
)
);
@ -89,7 +86,6 @@ class CompanyController extends AbstractController
{
$this->navLinks['company_nav'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
$companyDocs = $this->entityManager->getRepository(CompanyDocument::class)->findBy(['company' => $user->getCompany()], ['title' => 'ASC']);
return $this->render(
@ -98,7 +94,7 @@ class CompanyController extends AbstractController
$this->navLinks,
[
'breadcrumbs' => [],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'docs' => $companyDocs,
]
)
@ -109,7 +105,6 @@ class CompanyController extends AbstractController
public function addCompanyDocument(Request $request, #[CurrentUser()] User $user): Response
{
$this->navLinks['company_nav'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
$form = $this->createForm(CompanyDocumentFormType::class);
@ -134,7 +129,7 @@ class CompanyController extends AbstractController
$this->navLinks,
[
'breadcrumbs' => [],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'form' => $form,
]
)
@ -147,8 +142,7 @@ class CompanyController extends AbstractController
$companyDoc = $this->entityManager->getRepository(CompanyDocument::class)->find($docId);
$this->navLinks['company_nav'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
checkdate(1, 1, 1);
$form = $this->createForm(CompanyDocumentFormType::class, $companyDoc);
$form->handleRequest($request);
@ -171,7 +165,7 @@ class CompanyController extends AbstractController
$this->navLinks,
[
'breadcrumbs' => [],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'form' => $form,
'doc' => $companyDoc,
'docText' => str_replace("\r\n", "", $companyDoc->getText())

View File

@ -2,18 +2,23 @@
namespace App\Controller;
use App\Entity\Messages;
use App\Entity\CaseItinerary;
use App\Entity\User;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
use App\Libs\NavList;
use DateInterval;
use DateTime;
use DateTimeZone;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
@ -22,19 +27,9 @@ use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\String\Slugger\SluggerInterface;
use Vich\UploaderBundle\Entity\File;
class DefaultController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
private int $notificationCount = 0;
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly UserPasswordHasherInterface $userPasswordHasher,
@ -47,13 +42,61 @@ class DefaultController extends AbstractController
public function dashboard(Request $request, #[CurrentUser()] ?User $user): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
if (!$user->getCompany()) {
return $this->redirectToRoute('app_register_step', ['step' => RegistrationController::REGISTER_STEP_TWO]);
}
$ytdtravel = $this->entityManager->getRepository(CaseItinerary::class)->getYTDTravel($user);
$last30days = $this->entityManager->getRepository(CaseItinerary::class)->getTravelLast30Days($user);
$ytdMiles = 0;
$milesTravelled30Days = 0;
$caseMileageYTD = 0;
$caseMileage30Days = 0;
$totalTimeTravelledYTD = new DateInterval('PT0S');
$totalTimeTravelled30Days = new DateInterval('PT0S');
if ($ytdtravel) {
$timeTravelled = new DateTime('00:00:00');
$timeTravelYTDStart = new DateTime('00:00:00');
foreach ($ytdtravel as $travel) {
/** @var CaseItinerary $travel */
$ytdMiles += $travel->getDistance();
$timeTravelled->add($travel->getDuration());
if ($travel->isCaseMileage()) {
$caseMileageYTD += $travel->getDistance();
}
}
$totalTimeTravelledYTD = $timeTravelled->diff($timeTravelYTDStart);
}
if ($last30days) {
$timeTravelled30Days = new DateTime('00:00:00');
$timeTravel30DaysStart = new DateTime('00:00:00');
foreach ($last30days as $travel) {
/** @var CaseItinerary $travel */
$milesTravelled30Days += $travel->getDistance();
$timeTravelled30Days->add($travel->getDuration());
if ($travel->isCaseMileage()) {
$caseMileage30Days += $travel->getDistance();
}
}
$totalTimeTravelled30Days = $timeTravelled30Days->diff($timeTravel30DaysStart);
}
$activeCases = 0;
$totalCases = 0;
foreach ($user->getUserCases() as $uc) {
$totalCases++;
if (!$uc->getMemberCase()->getCloseDate()) {
$activeCases++;
}
}
$this->navLinks['user_dashboard'] = NavList::PRESENT_LINK;
return $this->render(
@ -64,10 +107,15 @@ class DefaultController extends AbstractController
'breadcrumbs' => [
new Breadcrumb('', 'Dashboard')
],
'notifications' => $this->msgs,
'notificationCount' => $this->notificationCount,
'milesTravelledYTD' => 0,
'milesTravelled30Days' => 0,
'notifications' => Libs::getMessages($user, $this->entityManager),
'milesTravelledYTD' => $ytdMiles,
'milesTravelled30Days' => $milesTravelled30Days,
'totalTimeTravelledYTD' => $totalTimeTravelledYTD,
'totalTimeTravelled30Days' => $totalTimeTravelled30Days,
'activeCases' => $activeCases,
'totalCases' => $totalCases,
'caseMileageYTD' => $caseMileageYTD,
'caseMileage30Days' => $caseMileage30Days,
]
)
);
@ -80,9 +128,7 @@ class DefaultController extends AbstractController
SluggerInterface $slugger
): Response {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
$this->navLinks['profile'] = NavList::PRESENT_LINK;
$form = $this->createFormBuilder($user)
@ -104,11 +150,18 @@ class DefaultController extends AbstractController
'first_options' => ['label' => 'Password', 'label_attr' => ['class' => 'form-label']],
'second_options' => ['label' => 'Repeat Password', 'label_attr' => ['class' => 'form-label']],
])
->add('personalPhone', TelType::class, [
'label' => 'Personal Phone',
])
->add('workPhone', TelType::class, [
'label' => 'Work Phone',
])
->add('imageName', FileType::class, [
'label' => 'Profile Picture',
'required' => false,
'mapped' => false
])
->add('signature', HiddenType::class)
->add('submit', SubmitType::class, [
'label' => 'Save Profile',
'attr' => ['class' => 'btn btn-lg bg-gradient-dark btn-lg w-100 mt-4 mb-0']
@ -119,6 +172,11 @@ class DefaultController extends AbstractController
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('signature')->getData()) {
$signature = $form->get('signature')->getData();
$user->setSignature($signature);
}
$firstPassword = $form->get('password')['first']->getData();
$secondPassword = $form->get('password')['second']->getData();
@ -136,7 +194,7 @@ class DefaultController extends AbstractController
$plainPassword
)
);
$user->setPasswordChanged(new DateTime())
$user->setPasswordChanged(new DateTime('now', new DateTimeZone($_ENV['COMPANY_TIMEZONE'])));
}
if ($form['imageName']->getData()) {
@ -158,6 +216,16 @@ class DefaultController extends AbstractController
$user->setImageName($newFilename);
}
if ($form['personalPhone']->getData()) {
$phone = Libs::Phone($form['personalPhone']->getData());
$user->setPersonalPhone($phone);
}
if ($form['workPhone']->getData()) {
$phone = Libs::Phone($form['workPhone']->getData());
$user->setWorkPhone($phone);
}
$this->entityManager->persist($user);
$this->entityManager->flush();
@ -174,18 +242,25 @@ class DefaultController extends AbstractController
'breadcrumbs' => [
new Breadcrumb('', 'Profile')
],
'notifications' => $this->msgs,
'notificationCount' => $this->notificationCount,
'notifications' => Libs::getMessages($user, $this->entityManager),
'currentUser' => $user,
'signaturePresent' => ($user->getSignature() ? true : false),
'signature' => $user->getSignature(),
'form' => $form->createView(),
]
)
);
}
#[Route('/uploads/user_images/{imageName}', name: 'app_user_image')]
#[Route('/uploads/user_images/{imageName}', name: 'app_user_profile_image')]
public function displayUserImage(string $imageName): Response
{
return new BinaryFileResponse($this->getParameter('kernel.project_dir')."/public/uploads/user_images/{$imageName}");
return new BinaryFileResponse("{$this->getParameter('kernel.project_dir')}/public/{$_ENV['USER_IMAGE_PATH']}/{$imageName}");
}
#[Route('/uploads/company_images/{companyLogo}', name: 'app_company_logo')]
public function displayCompanyLogo(string $companyLogo): Response
{
return new BinaryFileResponse("{$this->getParameter('kernel.project_dir')}/public/{$_ENV['COMPANY_IMAGE_PATH']}/{$companyLogo}");
}
}

View File

@ -2,11 +2,14 @@
namespace App\Controller;
use App\Entity\CaseDocument;
use App\Entity\CompanyDocument;
use App\Entity\MemberCase;
use App\Entity\User;
use App\Libs\NavList;
use App\Libs\Libs;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
@ -23,8 +26,6 @@ class DocumentController extends AbstractController
#[Route('/case/{caseId}/doc/{docId}', name: 'app_display_case_doc')]
public function displayCaseDocument(string $caseId, string $docId, #[CurrentUser()] User $user): Response
{
$msgs = Libs::getMessages($user, $this->entityManager);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$doc = $this->entityManager->getRepository(CompanyDocument::class)->find($docId);
$caseDoc = $this->entityManager->getRepository(CaseDocument::class)->getCaseDocument($case, $doc);
@ -34,8 +35,7 @@ class DocumentController extends AbstractController
array_merge(
$this->navLinks,
[
'msgs' => $msgs,
'notificationCount' => count($msgs),
'msgs' => Libs::getMessages($user, $this->entityManager),
'breadcrumbs' => []
]
)

View File

@ -6,7 +6,6 @@ use App\Entity\CaseItinerary;
use App\Entity\CaseLocation;
use App\Entity\Location;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\User;
use App\Entity\UserCase;
use App\Libs\Breadcrumb;
@ -29,8 +28,6 @@ use Symfony\UX\Map\Polyline;
class ItineraryController extends AbstractController
{
private array $msgs = [];
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = []
@ -43,8 +40,6 @@ class ItineraryController extends AbstractController
{
$this->navLinks['case_itinerary'] = NavList::PRESENT_LINK;
$this->msgs = Libs::getMessages($user, $this->entityManager);
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel(
$user
);
@ -64,7 +59,7 @@ class ItineraryController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_dashboard'), 'Dashboard'),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'itineraries' => $itineraries,
'cases' => $cases
]
@ -93,8 +88,6 @@ class ItineraryController extends AbstractController
new DateTime($request->getPayload()->get('endDate'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']))
:
null);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel($user, [
'case' => $case,
@ -160,7 +153,7 @@ class ItineraryController extends AbstractController
new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases'),
new Breadcrumb($this->generateUrl('app_report_itinerary'), 'Itinerary Report'),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'map' => $map,
'total_distance' => $total_distance,
'total_duration' => $di->format("%H:%i'%s''"),
@ -168,105 +161,4 @@ class ItineraryController extends AbstractController
)
);
}
#[Route('/api/get-case-locations/{caseId}', name: 'get_case_locations')]
public function createItinerary(string $caseId): Response
{
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$cls = $this->entityManager->getRepository(CaseLocation::class)->getCaseLocations($case);
$locations = [];
foreach ($cls as $cl) {
/** @var CaseLocation $cl */
$locations[] = $cl->getLocation();
}
return $this->json($locations);
}
#[Route('/api/add-location-to-itinerary', name: 'add_location_to_itinerary')]
public function addLocationToItinerary(Request $request, Session $session): Response
{
$case = $this->entityManager->getRepository(MemberCase::class)->find($request->getPayload()->get('caseId'));
$origin = $this->entityManager->getRepository(Location::class)->find($request->getPayload()->get('origin'));
$destination = $this->entityManager->getRepository(Location::class)->find($request->getPayload()->get('destination'));
$departure = $request->getPayload()->get('departure');
$arrival = $request->getPayload()->get('arrival');
$caseMileage = (bool) $request->getPayload()->get('caseMileage');
$date = new DateTime($request->getPayload()->get('date'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
$route = Libs::getRouteDistance($origin, $destination);
if (!$route) {
return $this->json(['success' => false, 'message' => 'No route found']);
}
$ci = new CaseItinerary();
$ci->setMemberCase($case)
->setDate($date)
->setCaseMileage($caseMileage)
->setOriginLocation($origin)
->setDestLocation($destination)
->setDeparture(new \DateTimeImmutable($departure))
->setArrival(new \DateTimeImmutable($arrival))
->setDistance($route->getDistance())
->setDuration($route->getDuration())
->setGpsRoute($route->getGeometry())
;
$this->entityManager->persist($ci);
$this->entityManager->flush();
$session->getFlashBag()->add(
'success',
'Location added to itinerary'
);
return $this->json(['success' => true, 'message' => 'Location added to itinerary']);
}
#[Route('/api/filter-itinerary-by-case', name: 'ajax_filter_itinerary_by_case')]
public function filterItineraryByCase(Request $request, #[CurrentUser()] ?User $user): Response
{
$case = null;
$startDate = null;
$endDate = null;
//dd($request->getPayload());
if ($request->getPayload()->get('caseId')) {
$caseId = $request->getPayload()->get('caseId');
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
}
if ($request->getPayload()->get('startDate')) {
$startDate = new DateTime($request->getPayload()->get('startDate'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
}
if ($request->getPayload()->get('endDate')) {
$endDate = new DateTime($request->getPayload()->get('endDate'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
}
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel($user, [
'case' => $case,
'from' => $startDate,
'to' => $endDate,
]);
$ret = [];
foreach ($itineraries as $itinerary) {
/** @var CaseItinerary $itinerary */
$ret[] = [
'id' => $itinerary->getId()->toString(),
'date' => $itinerary->getDate()->format('F j, Y'),
'origin' => $itinerary->getOriginLocation(),
'destination' => $itinerary->getDestLocation(),
'distance' => $itinerary->getDistance(),
'duration' => $itinerary->getDuration()->format("%h:%i'%s''"),
'case' => $itinerary->getMemberCase()->getCaseName(),
];
}
return $this->json($ret);
}
}

View File

@ -19,13 +19,6 @@ use Symfony\Component\Security\Http\Attribute\CurrentUser;
class MemberController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = [],
@ -37,8 +30,6 @@ class MemberController extends AbstractController
#[Route('/list-members/{id}', name: 'app_case_members')]
public function listMembers(Request $request, #[CurrentUser()] User $user, string $id): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
$members = $this->entityManager->getRepository(Member::class)->getCaseMembersByName($case);
@ -51,7 +42,7 @@ class MemberController extends AbstractController
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $id]), 'List Members'),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'case' => $case,
'members' => $members,
]
@ -62,8 +53,6 @@ class MemberController extends AbstractController
#[Route('/add-member/{id}', name: 'app_case_add_member')]
public function addMember(Request $request, #[CurrentUser()] User $user, string $id): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
/** @var MemberCase $case */
$case = $this->entityManager->getRepository(MemberCase::class)->find($id);
@ -123,7 +112,7 @@ class MemberController extends AbstractController
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $id]), 'List Members'),
new Breadcrumb($this->generateUrl('app_case_add_member', ['id' => $id]), 'Add Member'),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'case' => $case,
'form' => $form->createView(),
]
@ -134,8 +123,6 @@ class MemberController extends AbstractController
#[Route('/case/{caseId}/edit-member/{memberId}', name: 'app_case_edit_member')]
public function editMember(Request $request, #[CurrentUser()] User $user, string $caseId, string $memberId): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$member = $this->entityManager->getRepository(Member::class)->find($memberId);
$form = $this->createForm(MemberFormType::class, $member);
@ -190,7 +177,7 @@ class MemberController extends AbstractController
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $caseId]), 'List Members'),
new Breadcrumb($this->generateUrl('app_case_edit_member', ['caseId' => $caseId, 'memberId' => $memberId]), 'Edit Member'),
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'member' => $member,
'form' => $form->createView(),
'caseId' => $caseId,

View File

@ -49,8 +49,6 @@ class MessageController extends AbstractController
$message->setMessage($data['message']);
$message->setType(MessageType::GENERAL);
//dd($message);
$this->entityManager->persist($message);
$this->entityManager->flush();

View File

@ -4,7 +4,6 @@ namespace App\Controller;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\Referral;
use App\Entity\StandardNote;
use App\Entity\StandardNoteMember;
@ -31,13 +30,6 @@ use Symfony\Component\Security\Http\Attribute\CurrentUser;
class NoteController extends AbstractController
{
/**
* Variable to store unread notification messages
*
* @var array
*/
private array $msgs;
public function __construct(
private EntityManagerInterface $entityManager,
private array $navLinks = [],
@ -49,8 +41,6 @@ class NoteController extends AbstractController
#[Route('/list-notes/{caseId?null}', name: 'app_list_notes')]
public function listNotes(string $caseId = null, #[CurrentUser()] User $user, Request $request): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
/** @var UserCase[] $cases */
$cases = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
$caseNotes = null;
@ -78,7 +68,7 @@ class NoteController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_notes'), 'List Notes')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'cases' => $cases,
'caseNotes' => $caseNotes,
'case' => $case,
@ -93,7 +83,6 @@ class NoteController extends AbstractController
/** @var Referral $referral */
$referral = $this->entityManager->getRepository(Referral::class)->find($referralId);
$this->entityManager->getRepository(Referral::class)->populateNotes($referral);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$members = $this->entityManager->getRepository(Member::class)->findBy(['caseId' => $referral->getMemberCase()]);
$defaultMethod = NoteMethod::BILLABLE;
@ -135,7 +124,7 @@ class NoteController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_notes'), 'List Notes')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'referral' => $referral,
'form' => $form,
'default_method' => $defaultMethod,
@ -148,8 +137,6 @@ class NoteController extends AbstractController
#[Route('/edit-note/{noteType}/{noteId}', name: 'app_edit_note')]
public function editNote(string $noteId, string $noteType, #[CurrentUser()] User $user, Request $request): Response
{
$this->msgs = Libs::getMessages($user, $this->entityManager);
$form = null;
/** @var VisitNote|StandardNote $note */
@ -171,7 +158,7 @@ class NoteController extends AbstractController
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_notes'), 'List Notes')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'note' => $note,
'referral' => $note->getReferral(),
'form' => $form,
@ -180,58 +167,4 @@ class NoteController extends AbstractController
)
);
}
#[Route('/api/filter-notes', name: 'api_filter_notes')]
public function filterNotes(#[CurrentUser()] User $user, Request $request): Response
{
$startDate = null;
$endDate = null;
$referral = null;
$case = null;
if ($request->getPayload()->get('startDate')) {
$startDate = new DateTime($request->getPayload()->get('startDate'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
}
if ($request->getPayload()->get('endDate')) {
$endDate = new DateTime($request->getPayload()->get('endDate'), new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
}
if ($request->getPayload()->get('referral')) {
$referral = $this->entityManager->getRepository(Referral::class)->find($request->getPayload()->get('referral'));
}
if ($request->getPayload()->get('case')) {
$case = $this->entityManager->getRepository(MemberCase::class)->find($request->getPayload()->get('case'));
}
$params = [
'startDate' => $startDate,
'endDate' => $endDate,
'referral' => $referral,
'case' => $case,
];
$notes = array_merge(
$this->entityManager->getRepository(VisitNote::class)->filterNotes($user, $params),
$this->entityManager->getRepository(StandardNote::class)->filterNotes($user, $params),
);
foreach ($notes as $idx => $note) {
/** @var VisitNote|StandardNote $note */
/** @var VisitNoteMember[]|StandardNoteMember[] $members */
if ($note instanceof VisitNote) {
$members = $this->entityManager->getRepository(VisitNoteMembers::class)->findBy(['note' => $note]);
} elseif ($note instanceof StandardNote) {
$members = $this->entityManager->getRepository(StandardNoteMember::class)->findBy(['note' => $note]);
} else {
continue;
}
$notes[$idx]->setMembers($members);
}
return new Response(json_encode($notes, 0, 3));
}
}