Compare commits

...

47 Commits

Author SHA1 Message Date
c9cf8d7e0a up: various twig templates
* various twig updates
2025-02-10 16:18:53 -05:00
b828333222 fix: twig note templates
* fix edit notes and and member present
* refactor enum moving process
2025-02-10 15:10:25 -05:00
607ca79c4d up: various
* various minor update
2025-02-10 15:08:28 -05:00
0ebd90a03b up: twig company-info
* add vendorId twig template form element
2025-02-10 15:05:56 -05:00
24784bb1bb add: twig case
* add case rate to twig template forms
2025-02-10 15:04:43 -05:00
e3380bab2f up: UserChecker
* Rename user class
2025-02-10 15:03:02 -05:00
2cd4c68baf fix: MemberRepository
* Fix getting selected members from a note
2025-02-10 15:00:10 -05:00
52f835bbda fix: *NoteFormType
* Fix member selection
2025-02-10 14:59:13 -05:00
680b7ab9bd up: MemberCaseFormType
* Add rate property form element
2025-02-10 14:58:11 -05:00
4f6a80eade up: MemberCaseFormType
* Add vendorId property
2025-02-10 14:57:33 -05:00
53d9350cb8 up: MemberCase
* Add rate integer property
2025-02-10 14:54:45 -05:00
428304e5af up: Company
* add vendorId property and methods, may need to add more for reporting data
2025-02-09 18:16:14 -05:00
c4d1a33272 up: VisitNote & StandardNote
* couple minor changes
2025-02-09 18:15:21 -05:00
4fd42970ac up: Member
* add checked property and setId method to support note editing and retrieval and display of form parameters
2025-02-09 18:14:53 -05:00
1fd72d95e0 ref: MessageController
* move message controller to new path, forgot to update namespace
2025-02-09 18:14:01 -05:00
74ad66496e add: DefaultController
* add up method for connection checking
2025-02-09 18:13:32 -05:00
8851c4f6e8 ref: AjaxController
* refactor for readability
2025-02-09 18:13:00 -05:00
51ea4e2311 up: ReferralController
* remove $this->msgs and just call Libs::getMessages method
2025-02-09 18:12:36 -05:00
4859aa23b8 up: NoteController
* add error if user doesn't select referral when trying to add new note
* Finalize note editing
2025-02-09 18:11:48 -05:00
e601727514 sec: AdminController
* set initial password change date to epoch when creating new account
2025-02-09 18:10:14 -05:00
b54e2a51f9 ref: security.yaml
* update entity path after moving entities around
2025-02-09 18:09:11 -05:00
d51c67db3d up: notes.js
* Convert duration to hours/units
* Move calcTime method here
2025-02-09 18:08:32 -05:00
1cfc4c7355 rm: itinerary.js
* remove arrival because it's unnecessary
2025-02-09 18:06:42 -05:00
8e85405426 upd: CaseController
* remove assignCaseDocument method in favor of Member Document assignment
2025-01-28 21:02:20 -05:00
9887889ecb ref: Repositories
* Refactor all files
2025-01-28 20:59:14 -05:00
593958cc68 ref: Libs
* Refactor files
* Move autocompleteAddress method to GeoapifyController
2025-01-28 20:58:47 -05:00
528827868b upd: Forms
* Move classes
2025-01-28 20:54:50 -05:00
af6ebbb1b2 mv: Factories
* move files
2025-01-28 20:48:41 -05:00
e08e23d647 mv: Enums
* Move enums
2025-01-28 20:48:00 -05:00
bcc32bf445 mv: Refactor
* Move entities for organization
2025-01-28 20:47:26 -05:00
ee2fce4c41 upd: DataFixtures
* Refactor after moving files
2025-01-28 20:46:38 -05:00
13aaaae34c mv: All Controllers
* Move all controllers to sub-directories for organization
2025-01-28 20:43:23 -05:00
fc9ebbd327 upd: importmap
* add moment library
2025-01-24 11:20:13 -05:00
4cddccdf6e upd: twig nav
* remove case notes nav in favor of navigating through case data
* rename Case Addresses to Addresses
2025-01-24 11:19:06 -05:00
3d786f1f16 upd: twig list-notes
* correct link for adding a new note
* remove display of present members
2025-01-24 11:16:25 -05:00
e5f09bd8cc upd: Libs
Permissions checking
* Add checkPermissions method to check the permissions of the user to the case to make sure they have permissions to add or edit.
2025-01-24 10:35:46 -05:00
77d90ed691 fix: NoteForms
* change members field to unmapped
2025-01-24 10:34:12 -05:00
0d69b51ff9 upd: CommunityResource
* Add method to convert class to Location object
2025-01-24 10:19:43 -05:00
df29fd0d99 fix: NoteController
Save members
* get note members working, still need to setup editing
2025-01-24 10:18:56 -05:00
09ae2756c2 upd: ItineraryController
* remove unnecessary use statements
2025-01-24 10:17:43 -05:00
520409b0b4 fix: CaseController
* add permission validation
2025-01-24 10:15:49 -05:00
fe622ef794 upd: twig edit-members
add member documents
2025-01-22 21:32:58 -05:00
0844b3fc58 upd: MemberDocumentRepository
Remove
* remove unsigned documents from repository for member to sign
2025-01-22 21:32:26 -05:00
6468e77445 upd: User
vCard profile
* Add profile image to vCard
2025-01-22 21:31:36 -05:00
2e41c1ed83 fix: CompanyDocument
Add Property
* add selected property to support edit-member functionality
2025-01-22 21:28:27 -05:00
6ecb76a829 fix: MemberController
member editting
* Add documents
* Cleanup
2025-01-22 21:20:24 -05:00
1fa3843b50 fix: remove class permission requirement 2025-01-22 21:02:30 -05:00
135 changed files with 1883 additions and 789 deletions

View File

@ -17,7 +17,6 @@ export function addLocationToItinerary() {
let origin = document.getElementById('origin').value;
let destination = document.getElementById('destination').value;
let departure = document.getElementById('departure').value;
let arrival = document.getElementById('arrival').value;
let caseMileage = document.getElementById('case-mileage').checked;
let caseId = document.getElementById('case-filter').value;
@ -32,7 +31,6 @@ export function addLocationToItinerary() {
origin: origin,
destination: destination,
departure: departure,
arrival: arrival,
caseMileage: caseMileage
})
})

View File

@ -28,10 +28,11 @@ export function filterNotes()
noteList.innerHTML = '';
data.forEach(i => {
let duration = (parseInt(i.duration) / 60).toFixed(2);
noteList.innerHTML += `
<tr>
<td>${i.date}<br/>
${i.startTime}-${i.endTime} (${i.duration})</td>
${i.startTime}-${i.endTime} (${duration})</td>
<td class='text-center'>${i.location}</td>
<td class='text-center'>${i.method}</td>
<td'>${i.members}</td>
@ -44,3 +45,47 @@ export function filterNotes()
})
});
}
export function calcTime(precision = 15) {
if (!document.getElementById('note_form_startTime').value || !document.getElementById('note_form_endTime').value) {
console.log('ending');
return;
}
let st = document.getElementById('note_form_startTime').value.split(':');
let et = document.getElementById('note_form_endTime').value.split(':');
let sd = new Date();
let ed = new Date();
sd.setHours(st[0]);
sd.setMinutes(st[1]);
sd.setSeconds(0);
ed.setHours(et[0]);
ed.setMinutes(et[1]);
ed.setSeconds(0);
let timediff = (ed.getTime() - sd.getTime()) / 1000;
let increments = (timediff / 60) / precision;
if (isFloat(increments)) {
let mod = (timediff / 60) % precision;
if (mod >= (precision / 2)) {
increments++;
}
increments = parseInt(increments);
}
document.getElementById('case-mins').value = (increments * precision)+' minutes';
document.getElementById('case-hours').value = ((increments * precision) / 60)+' hours';
}
export function autosaveNote()
{
}
export function checkNotes() {
}

View File

@ -7,7 +7,7 @@ security:
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\User
class: App\Entity\System\User
property: username
# used to reload user from session & other features (e.g. switch_user)
firewalls:

View File

@ -88,4 +88,7 @@ return [
'tinymce' => [
'version' => '7.6.0',
],
'moment' => [
'version' => '2.30.1',
],
];

View File

@ -1,9 +1,9 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\Supervision;
use App\Entity\User;
use App\Entity\Staff\Supervision;
use App\Entity\System\User;
use App\Factory\MessageFactory;
use App\Form\EditUserFormType;
use App\Form\SupervisorFormType;
@ -11,7 +11,6 @@ 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;
@ -137,7 +136,7 @@ class AdminController extends AbstractController
->setLevel($form->get('level')->getData())
->setCompany($admin->getCompany())
->setActive(true)
->setPasswordChanged(new DateTime('now', new DateTimeZone($_ENV['COMPANY_TIMEZONE'])))
->setPasswordChanged(new DateTime('1970-01-01 00:00:00', new DateTimeZone($_ENV['COMPANY_TIMEZONE'])))
;
if ($form->get('imageName')->getData()) {

View File

@ -1,16 +1,15 @@
<?php
namespace App\Controller;
namespace App\Controller\Case;
use App\Entity\CaseDocument;
use App\Entity\CaseLocation;
use App\Entity\CompanyDocument;
use App\Entity\Location;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\ReferralSource;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\Case\CaseLocation;
use App\Entity\Company\CompanyDocument;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;
use App\Entity\System\Location;
use App\Entity\System\ReferralSource;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Factory\MessageFactory;
use App\Form\CaseDocumentFormType;
use App\Form\LocationFormType;
@ -24,6 +23,7 @@ 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\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
class CaseController extends AbstractController
@ -39,6 +39,10 @@ class CaseController extends AbstractController
#[Route('/my-cases', name: 'app_my_cases')]
public function myCases(#[CurrentUser()] User $user, Request $request): Response
{
if (!$this->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->redirectToRoute('app_login');
}
$this->navLinks['my_cases'] = NavList::PRESENT_LINK;
$this->navLinks['case_list'] = NavList::DEFAULT;
@ -58,7 +62,7 @@ class CaseController extends AbstractController
'breadcrumbs' => [
(
strpos($request->server->get('HTTP_REFERER'), 'list-cases') !== false
? new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases')
? new Breadcrumb($this->generateUrl('app_list_cases'), 'Cases')
: new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases')
),
],
@ -103,7 +107,9 @@ class CaseController extends AbstractController
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
/** @todo validate user has access to case, check for admin, case manager of case worker */
//$uc = $this->entityManager->getRepository(UserCase::class)
if (!Libs::checkPermissions($user, $case, $this->entityManager)) {
throw new AccessDeniedException();
}
$sources = $this->entityManager->getRepository(ReferralSource::class)->findAll();
@ -115,7 +121,7 @@ class CaseController extends AbstractController
'case' => $case,
'sources' => $sources,
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_list_cases'), 'Cases'),
new Breadcrumb($this->generateUrl('app_view_case', ['caseId' => $case->getId()]), 'View Case')
],
'notifications' => Libs::getMessages($user, $this->entityManager),
@ -411,51 +417,4 @@ 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
{
$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()]);
$form = $this->createForm(CaseDocumentFormType::class, null, ['docs' => $companyDocs]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$docs = $form['document']->getData();
dd($docs);
$this->entityManager->persist($cd);
$this->entityManager->flush();
$this->redirectToRoute('app_case_members', ['id' => $caseId]);
}
return $this->render(
'internal/cases/members/assign-document.html.twig',
array_merge(
$this->navLinks,
[
'notifications' => Libs::getMessages($user, $this->entityManager),
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_dashboard'), 'Dashboard'),
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $caseId]), 'Case Members')
],
'form' => $form,
'case' => $case,
'member' => $member,
'docs' => $companyDocs,
]
)
);
}
#[Route('/sign-case-doc/{caseId}/{docId}/{memberId}', name: 'app_display_case_document')]
public function displayCaseDocument(string $caseId, string $docId, Request $request, #[CurrentUser()] User $user): Response
{
return new Response();
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Controller\Case;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class GeoapifyController extends AbstractController
{
#[Route('/api/autocomplete-address/{searchText}', name: 'app_api_autocomplete_address')]
public function autocompleteAddress(string $searchText): Response
{
$params = [
'text' => $searchText,
'format' => 'json',
'apiKey' => $_ENV['GEOAPIFY_API_KEY']
];
$url = "https://api.geoapify.com/v1/autocomplete?".http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($ch);
curl_close($ch);
return $this->json($result);
}
}

View File

@ -1,13 +1,11 @@
<?php
namespace App\Controller;
namespace App\Controller\Case;
use App\Entity\CaseItinerary;
use App\Entity\CaseLocation;
use App\Entity\Location;
use App\Entity\MemberCase;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\Case\CaseItinerary;
use App\Entity\Case\MemberCase;;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
use App\Libs\NavList;
@ -17,7 +15,6 @@ use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\UX\Map\InfoWindow;

View File

@ -1,14 +1,13 @@
<?php
namespace App\Controller;
namespace App\Controller\Case;
use App\Entity\CompanyDocument;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\MemberDocument;
use App\Entity\Messages;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\Company\CompanyDocument;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\MemberDocument;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Form\MemberFormType;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
@ -130,40 +129,54 @@ 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
{
/** @var Member $member */
$member = $this->entityManager->getRepository(Member::class)->find($memberId);
/** @var MemberCase $case */
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
$form = $this->createForm(MemberFormType::class, $member);
/** @var array<int, CompanyDocuments> $docs */
$docs = $this->entityManager->getRepository(CompanyDocument::class)->findBy(['company' => $user->getCompany()], ['title' => 'ASC']);
/** @var array<int, MemberDocument> $memberDocs */
$memberDocs = $this->entityManager->getRepository(MemberDocument::class)->findBy(['client' => $member]);
$memberDbDocs = [];
foreach($memberDocs as $md) {
$memberDbDocs[] = $md->getDocument()->getId()->toString();
}
foreach ($docs as $idx => $d) {
if (in_array($d->getId()->toString(), $memberDbDocs)) {
$docs[$idx]->setSelected();
}
}
$form = $this->createForm(MemberFormType::class, $member, ['docs' => $docs]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$member->setFirstName($form->get('firstName')->getData())
->setLastName($form->get('lastName')->getData())
->setDob($form->get('dob')->getData())
->setGender($form->get('gender')->getData())
->setRace($form->get('race')->getData())
->setLanguage($form->get('language')->getData())
->setPersonalId($form->get('personalId')->getData())
->setEmergencyContact($form->get('emergencyContact')->getData())
->setEmail($form->get('email')->getData())
->setAddress($form->get('address')->getData())
->setCity($form->get('city')->getData())
->setState($form->get('state')->getData())
->setZip($form->get('zip')->getData())
->setPhone($form->get('phone')->getData())
->setRelationship($form->get('relationship')->getData())
->setDayPhone($form->get('dayPhone')->getData())
->setEveningPhone($form->get('eveningPhone')->getData())
->setCellPhone($form->get('cellPhone')->getData())
->setSchool($form->get('school')->getData())
->setMaritalStatus($form->get('maritalStatus')->getData())
->setChild($form->get('isChild')->getData())
->setParent($form->get('isParent')->getData())
->setAdultChild($form->get('isAdultChild')->getData())
->setLegalGuardian($form->get('isLegalGuardian')->getData())
->setParentsLiveTogether($form->get('parentsLiveTogether')->getData())
->setDcsApproved($form->get('dcsApproved')->getData())
$member = $form->getData();
$member->setChild(($form->get('isChild') ? true : false))
->setParent(($form->get('isParent') ? true : false))
->setAdultChild(($form->get('isAdultChild') ? true : false))
->setLegalGuardian(($form->get('isLegalGuardian') ? true : false))
->setParentsLiveTogether(($form->get('parentsLiveTogether') ? true : false))
->setDcsApproved(($form->get('dcsApproved') ? true : false))
;
$this->entityManager->getRepository(MemberDocument::class)->removeUnsigned($member);
$selectedDocs = $form->get('docs')->getData();
foreach ($selectedDocs as $d) {
$md = new MemberDocument();
$md->setClient($member)
->setCaseWorker($user)
->setDocument($d)
;
$this->entityManager->persist($md);
$this->entityManager->flush();
}
$this->entityManager->flush();
$this->addFlash(
@ -180,14 +193,16 @@ class MemberController extends AbstractController
$this->navLinks,
[
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_list_cases'), 'List Cases'),
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $caseId]), 'List Members'),
new Breadcrumb($this->generateUrl('app_list_cases'), 'Cases'),
new Breadcrumb($this->generateUrl('app_case_members', ['id' => $caseId]), 'Members'),
new Breadcrumb($this->generateUrl('app_case_edit_member', ['caseId' => $caseId, 'memberId' => $memberId]), 'Edit Member'),
],
'notifications' => Libs::getMessages($user, $this->entityManager),
'member' => $member,
'form' => $form->createView(),
'caseId' => $caseId,
'docs' => $docs,
'selectedDocs' => $memberDbDocs,
]
)
);

View File

@ -1,26 +1,24 @@
<?php
namespace App\Controller;
namespace App\Controller\Case;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\Referral;
use App\Entity\StandardNote;
use App\Entity\StandardNoteMember;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\VisitNote;
use App\Entity\VisitNoteMembers;
use App\Enums\NoteLocation;
use App\Enums\NoteMethod;
use App\Enums\ReferralServiceType;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Entity\Case\StandardNote;
use App\Entity\Case\StandardNoteMember;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Entity\Case\VisitNote;
use App\Entity\Case\VisitNoteMembers;
use App\Enums\Case\NoteLocation;
use App\Enums\Case\NoteMethod;
use App\Enums\Case\ReferralServiceType;
use App\Form\StandardNoteFormType;
use App\Form\VisitNoteFormType;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
use App\Libs\NavList;
use DateTime;
use DateTimeZone;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@ -80,11 +78,15 @@ class NoteController extends AbstractController
#[Route('/add-note/{referralId}', name: 'app_add_note')]
public function addNote(#[CurrentUser()] User $user, Request $request, ?string $referralId = null): Response
{
if (substr($referralId, 0, 4) == 'case') {
throw $this->createNotFoundException('Select Referral from dropdown');
}
/** @var Referral $referral */
$referral = $this->entityManager->getRepository(Referral::class)->find($referralId);
$this->entityManager->getRepository(Referral::class)->populateNotes($referral);
$members = $this->entityManager->getRepository(Member::class)->findBy(['caseId' => $referral->getMemberCase()]);
$members = $this->entityManager->getRepository(Member::class)->findBy(['memberCase' => $referral->getMemberCase()]);
$defaultMethod = NoteMethod::BILLABLE;
$defaultLocation = NoteLocation::COMMUNITY_OUTING;
$form = $this->createForm(StandardNoteFormType::class, null, ['members' => $members]);
@ -113,6 +115,27 @@ class NoteController extends AbstractController
$this->entityManager->persist($note);
$this->entityManager->flush();
if ($form->get('members')->getData()) {
foreach ($form->get('members')->getData() as $mem) {
if ($referral->getServiceCode() == ReferralServiceType::VS_THBB) {
$nm = new VisitNoteMembers();
$nm->setVisitNote($note)
->setPerson($mem)
;
} else {
$nm = new StandardNoteMember();
$nm->setStandardNote($note)
->setPerson($mem)
;
}
$this->entityManager->persist($nm);
$this->entityManager->flush();
}
}
$this->addFlash('success', 'Note added successfully');
return $this->redirectToRoute('app_list_notes');
}
@ -127,6 +150,7 @@ class NoteController extends AbstractController
'notifications' => Libs::getMessages($user, $this->entityManager),
'referral' => $referral,
'form' => $form,
'members' => $members,
'default_method' => $defaultMethod,
'default_location' => $defaultLocation,
]
@ -138,16 +162,24 @@ class NoteController extends AbstractController
public function editNote(string $noteId, string $noteType, #[CurrentUser()] User $user, Request $request): Response
{
$form = null;
$members = [];
/** @var VisitNote|StandardNote $note */
if ($noteType == 'visit') {
/** @var VisitNote $note */
$note = $this->entityManager->getRepository(VisitNote::class)->find($noteId);
$members = $this->entityManager->getRepository(Member::class)->findBy(['memberCase' => $note->getReferral()->getMemberCase()]);
$form = $this->createForm(VisitNoteFormType::class, $note, ['members' => $members]);
$members = $this->entityManager->getRepository(Member::class)->getMembersByCaseAndNote($note->getReferral()->getMemberCase(), $note);
$form = $this->createForm(VisitNoteFormType::class, $note, [
'members' => $members,
//'members' => $this->entityManager->getRepository(Member::class)->findBy(['memberCase' => $note->getReferral()->getMemberCase()])
]);
} elseif ($noteType == 'standard') {
$note = $this->entityManager->getRepository(StandardNote::class)->find($noteId);
$members = $this->entityManager->getRepository(Member::class)->findBy(['memberCase' => $note->getReferral()->getMemberCase()]);
$form = $this->createForm(StandardNoteFormType::class, $note, ['members' => $members]);
$form = $this->createForm(StandardNoteFormType::class, $note, [
'members' => $members,
]);
}
return $this->render(
@ -162,7 +194,8 @@ class NoteController extends AbstractController
'note' => $note,
'referral' => $note->getReferral(),
'form' => $form,
'noteType' => $noteType
'noteType' => $noteType,
'members' => $members,
]
)
);

View File

@ -1,12 +1,11 @@
<?php
namespace App\Controller;
namespace App\Controller\Case;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\Referral;
use App\Entity\User;
use App\Entity\UserCase;
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;
@ -121,7 +120,6 @@ class ReferralController extends AbstractController
public function editReferral(Request $request, #[CurrentUser()] User $user, string $caseId, string $referralId): Response
{
$this->denyAccessUnlessGranted(['ROLE_ADMIN', 'ROLE_CASE_MANAGER']);
$this->msgs = Libs::getMessages($user, $this->entityManager);
$referral = $this->entityManager->getRepository(Referral::class)->find($referralId);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
@ -152,7 +150,7 @@ class ReferralController extends AbstractController
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' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
'case' => $case,
'form' => $form,
'referral' => $referral,

View File

@ -1,10 +1,10 @@
<?php
namespace App\Controller;
namespace App\Controller\Company;
use App\Entity\Company;
use App\Entity\CompanyDocument;
use App\Entity\User;
use App\Entity\Company\Company;
use App\Entity\Company\CompanyDocument;
use App\Entity\System\User;
use App\Form\CompanyDocumentFormType;
use App\Form\InternalCompanyFormType;
use App\Libs\Breadcrumb;
@ -23,7 +23,6 @@ use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Component\String\Slugger\SluggerInterface;
#[IsGranted('ROLE_ADMIN')]
class CompanyController extends AbstractController
{
public function __construct(

View File

@ -1,16 +1,17 @@
<?php
namespace App\Controller;
namespace App\Controller\Company;
use App\Entity\CompanyDocument;
use App\Entity\Member;
use App\Entity\MemberDocument;
use App\Entity\User;
use App\Entity\Company\CompanyDocument;
use App\Entity\Case\Member;
use App\Entity\Case\MemberDocument;
use App\Entity\System\User;
use App\Libs\Breadcrumb;
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\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Attribute\Route;
@ -49,12 +50,14 @@ class DocumentController extends AbstractController
}
#[Route('/member/{memberId}/document/{docId}/sign', name: 'app_member_sign_case_doc')]
public function signCaseDocument(string $memberId, string $docId, #[CurrentUser()] User $user): Response
public function signCaseDocument(string $memberId, string $docId, #[CurrentUser()] User $user, Request $request): Response
{
/** @var Member $member */
$member = $this->entityManager->getRepository(Member::class)->find($memberId);
/** @var CompanyDocument $doc */
$doc = $this->entityManager->getRepository(CompanyDocument::class)->find($docId);
/** @var MemberDocument $memDoc */
$memDoc = $this->entityManager->getRepository(MemberDocument::class)->findOneBy([
'document' => $doc,
'client' => $member,
@ -65,6 +68,10 @@ class DocumentController extends AbstractController
throw new NotFoundHttpException('Document not found');
}
//$form = $this->createForm(MemberDocument::class);
/** @todo add form data */
//$form->add();
return $this->render(
'internal/cases/members/documents/sign-member-doc.html.twig', [
'doc' => $memDoc,

View File

@ -1,10 +1,9 @@
<?php
namespace App\Controller;
namespace App\Controller\Resources;
use App\Entity\CommunityResource;
use App\Entity\Messages;
use App\Entity\User;
use App\Entity\Resources\CommunityResource;
use App\Entity\System\User;
use App\Form\ResourceFormType;
use App\Libs\Breadcrumb;
use App\Libs\Libs;

View File

@ -1,13 +1,12 @@
<?php
namespace App\Controller;
namespace App\Controller\Staff;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\StaffNote;
use App\Entity\Supervision;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\Case\MemberCase;;
use App\Entity\Staff\StaffNote;
use App\Entity\Staff\Supervision;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Factory\MessageFactory;
use App\Form\StaffNoteFormType;
use App\Form\SupervisorStaffNoteFormType;
@ -20,6 +19,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\Translation\Exception\NotFoundResourceException;
class StaffController extends AbstractController
{
@ -82,7 +82,14 @@ class StaffController extends AbstractController
$this->navLinks['staff_notes'] = NavList::PRESENT_LINK;
foreach ($ucs as $uc) {
$cases[] = $uc->getMemberCase();
$case = $uc->getMemberCase();
$lastNote = $this->entityManager->getRepository(StaffNote::class)->findOneBy(['memberCase' => $case], ['date' => 'DESC']);
if ($lastNote) {
$case->emptyStaffNotes();
$case->addStaffNote($lastNote);
}
$cases[] = $case;
}
return $this->render(
@ -109,15 +116,26 @@ class StaffController extends AbstractController
if (!$this->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->redirectToRoute('app_login');
}
$this->msgs = Libs::getMessages($user, $this->entityManager);
$staff = $this->entityManager->getRepository(User::class)->find($staffId);
$sup = $this->entityManager->getRepository(Supervision::class)->findOneBy(['worker' => $staff, 'supervisor' => $user]);
if (!$sup) {
throw new NotFoundResourceException("It does not appear you are the supervisor to this case worker");
}
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $staff]);
$cases = [];
foreach ($ucs as $case) {
/** @var UserCase $case */
$cases[] = $case->getMemberCase();
foreach ($ucs as $uc) {
/** @var MemberCase $case */
$case = $uc->getMemberCase();
$lastNote = $this->entityManager->getRepository(StaffNote::class)->findOneBy(['memberCase' => $case], ['date' => 'DESC']);
if ($lastNote) {
$case->emptyStaffNotes();
$case->addStaffNote($lastNote);
}
$cases[] = $case;
}
return $this->render(
@ -131,7 +149,7 @@ class StaffController extends AbstractController
new Breadcrumb($this->generateUrl('app_staff_dashboard'), 'Staff Dashboard'),
new Breadcrumb('', 'Staff Cases')
],
'notifications' => $this->msgs,
'notifications' => Libs::getMessages($user, $this->entityManager),
]
)
);

View File

@ -0,0 +1,274 @@
<?php
namespace App\Controller\System;
use App\Entity\Case\CaseItinerary;
use App\Entity\Case\CaseLocation;
use App\Entity\Resources\CommunityResource;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Entity\Case\StandardNote;
use App\Entity\Case\StandardNoteMember;
use App\Entity\System\Location;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Entity\Case\VisitNote;
use App\Entity\Case\VisitNoteMembers;
use App\Libs\Libs;
use DateTime;
use DateTimeZone;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
class AjaxController extends AbstractController
{
public function __construct(
private EntityManagerInterface $entityManager,
) {
}
#[Route('/api/itinerary/{id}/add', name: 'ajax_itinerary_add')]
public function addItinerary(string $id, Request $request): Response
{
$itinerary = $this->entityManager->getRepository(UserCase::class)->find($id);
$data = json_decode($request->getContent());
$location = new Location();
//$location->setItinerary($itinerary)
;
return $this->json($location);
}
#[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, #[CurrentUser()] User $admin) : Response
{
$ret = true;
$user = $this->entityManager->getRepository(User::class)->find($userId);
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
if (!Libs::checkPermissions($user, $case, $this->entityManager)) {
throw new AccessDeniedHttpException ('You do not have permission to access this resource.');
}
$res = UserCase::checkLevel($admin, $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);
}
#[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'];
if ($county) {
$resources = $this->entityManager->getRepository(CommunityResource::class)->findBy(['county' => $county]);
} else {
$resources = $this->entityManager->getRepository(CommunityResource::class)->findAll();
}
return $this->json($resources);
}
#[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);
$crs = $this->entityManager->getRepository(CommunityResource::class)->findAll();
$locations = [];
foreach ($cls as $cl) {
/** @var CaseLocation $cl */
$locations[] = $cl->getLocation();
}
foreach ($crs as $cr) {
$locations[] = $cr->toLocation();
}
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');
$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))
->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);
}
#[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));
}
}

View File

@ -1,10 +1,10 @@
<?php
namespace App\Controller;
namespace App\Controller\System;
use App\Entity\CaseItinerary;
use App\Entity\User;
use App\Entity\System\User;
use App\Libs\Breadcrumb;
use App\Libs\Dashboard;
use App\Libs\Libs;
use App\Libs\NavList;
use DateInterval;
@ -39,6 +39,19 @@ class DefaultController extends AbstractController
$this->navLinks = NavList::LIST;
}
#[Route('/up', name: 'app_up')]
public function up(): Response
{
$cnx = $this->entityManager->getConnection();
$cnx->connect();
$connected = $cnx->isConnected();
if ($connected) {
return $this->json(true, Response::HTTP_OK);
} else {
return $this->json(false, Response::HTTP_SERVICE_UNAVAILABLE);
}
}
#[Route('/dashboard', name: 'app_dashboard')]
public function dashboard(Request $request, #[CurrentUser()] ?User $user): Response
{
@ -56,59 +69,11 @@ class DefaultController extends AbstractController
return $this->redirectToRoute('app_profile');
}
if($_SERVER['HTTP_REFERER'] == "{$_SERVER['HTTP_X_FORWARDED_PROTO']}://{$_SERVER['HTTP_HOST']}/") {
if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == "{$_SERVER['HTTP_X_FORWARDED_PROTO']}://{$_SERVER['HTTP_HOST']}/") {
$this->entityManager->getRepository(User::class)->updateLastLogin($user);
}
$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++;
}
}
$dashboard = new Dashboard($this->entityManager, $user);
$this->navLinks['user_dashboard'] = NavList::PRESENT_LINK;
@ -116,19 +81,12 @@ class DefaultController extends AbstractController
'internal/dashboard.html.twig',
array_merge(
$this->navLinks,
$dashboard->toArray(),
[
'breadcrumbs' => [
new Breadcrumb('', 'Dashboard')
],
'notifications' => Libs::getMessages($user, $this->entityManager),
'milesTravelledYTD' => $ytdMiles,
'milesTravelled30Days' => $milesTravelled30Days,
'totalTimeTravelledYTD' => $totalTimeTravelledYTD,
'totalTimeTravelled30Days' => $totalTimeTravelled30Days,
'activeCases' => $activeCases,
'totalCases' => $totalCases,
'caseMileageYTD' => $caseMileageYTD,
'caseMileage30Days' => $caseMileage30Days,
]
)
);

View File

@ -1,12 +1,11 @@
<?php
namespace App\Controller;
namespace App\Controller\System;
use App\Entity\Messages;
use App\Entity\Supervision;
use App\Entity\User;
use App\Enums\MessageType;
use App\Libs\Libs;
use App\Entity\System\Messages;
use App\Entity\Staff\Supervision;
use App\Entity\System\User;
use App\Enums\System\MessageType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

View File

@ -1,10 +1,9 @@
<?php
namespace App\Controller;
namespace App\Controller\System;
use App\Entity\Messages;
use App\Entity\ReferralSource;
use App\Entity\User;
use App\Entity\System\ReferralSource;
use App\Entity\System\User;
use App\Form\ReferralSourceFormType;
use App\Libs\Breadcrumb;
use App\Libs\Libs;

View File

@ -1,12 +1,11 @@
<?php
namespace App\Controller;
namespace App\Controller\System;
use App\DataTransferObject\CompanyDetailsDto;
use App\Entity\User;
use App\Enums\CaseLevel;
use App\Enums\JobType;
use App\Enums\RateType;
use App\Entity\System\User;
use App\Enums\Case\CaseLevel;
use App\Enums\System\RateType;
use App\Factory\CompanyFactory;
use App\Form\CompanyFormType;
use App\Form\RegistrationFormType;
@ -80,11 +79,7 @@ class RegistrationController extends AbstractController
)
);
$user->setCaseWorker(true)
->setCaseManager(true)
->setTherapist(true)
->setSu(true)
->setRateType(RateType::FIXED)
$user->setRateType(RateType::FIXED)
->setRate('0.00')
->setRoles(['ROLE_ADMIN'])
->setLevel(CaseLevel::ADMIN);

View File

@ -1,6 +1,6 @@
<?php
namespace App\Controller;
namespace App\Controller\System;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

View File

@ -2,12 +2,12 @@
namespace App\DataFixtures;
use App\Entity\MemberCase;
use App\Entity\ReferralSource;
use App\Entity\User;
use App\Entity\UserCase;
use App\Enums\CaseLevel;
use App\Enums\County;
use App\Entity\Case\MemberCase;;
use App\Entity\System\ReferralSource;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Enums\Case\CaseLevel;
use App\Enums\System\County;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

View File

@ -2,12 +2,12 @@
namespace App\DataFixtures;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Enums\GenderType;
use App\Enums\RaceType;
use App\Enums\RelationshipType;
use App\Enums\State;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;;
use App\Enums\System\GenderType;
use App\Enums\Case\RaceType;
use App\Enums\Case\RelationshipType;
use App\Enums\System\State;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

View File

@ -2,15 +2,15 @@
namespace App\DataFixtures;
use App\Entity\MemberCase;
use App\Entity\Referral;
use App\Entity\StandardNote;
use App\Entity\VisitNote;
use App\Enums\NoteLocation;
use App\Enums\NoteMethod;
use App\Enums\NoteStatus;
use App\Enums\ReferralServiceType;
use App\Enums\VisitQualityLevel;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Entity\Case\StandardNote;
use App\Entity\Case\VisitNote;
use App\Enums\Case\NoteLocation;
use App\Enums\Case\NoteMethod;
use App\Enums\Case\NoteStatus;
use App\Enums\Case\ReferralServiceType;
use App\Enums\Case\VisitQualityLevel;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

View File

@ -2,9 +2,9 @@
namespace App\DataFixtures;
use App\Entity\MemberCase;
use App\Entity\Referral;
use App\Enums\ReferralServiceType;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Enums\Case\ReferralServiceType;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

View File

@ -2,8 +2,8 @@
namespace App\DataFixtures;
use App\Entity\ReferralSource;
use App\Enums\County;
use App\Entity\System\ReferralSource;
use App\Enums\System\County;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Faker\Factory;

View File

@ -2,9 +2,9 @@
namespace App\DataFixtures;
use App\Entity\MemberCase;
use App\Entity\StaffNote;
use App\Enums\ReferralServiceType;
use App\Entity\Case\MemberCase;;
use App\Entity\Staff\StaffNote;
use App\Enums\Case\ReferralServiceType;
use DateTime;
use DateTimeZone;
use Doctrine\Bundle\FixturesBundle\Fixture;

View File

@ -2,10 +2,10 @@
namespace App\DataFixtures;
use App\Entity\Company;
use App\Entity\User;
use App\Enums\CaseLevel;
use App\Enums\RateType;
use App\Entity\Company\Company;
use App\Entity\System\User;
use App\Enums\Case\CaseLevel;
use App\Enums\System\RateType;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
@ -47,10 +47,6 @@ class UserFixture extends Fixture
$user->setName($name)
->setUsername($username)
->setEmail($username.'@counselingpartnersllc.com')
->setCaseManager($cm)
->setCaseWorker($cw)
->setTherapist($t)
->setSu($su)
->setRoles($roles)
->setRateType($gen->randomElement(RateType::class))
->setRate($gen->numberBetween(0, 100))

View File

@ -1,8 +1,10 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Repository\CaseItineraryRepository;
use App\Entity\System\Location;
use App\Repository\Case\CaseItineraryRepository;
use DateTime;
use DateInterval;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
@ -19,6 +21,9 @@ class CaseItinerary
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private ?Uuid $id = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $date = null;
#[ORM\Column(type: Types::TIME_MUTABLE, nullable: true)]
private ?\DateTimeInterface $departure = null;
@ -26,9 +31,6 @@ class CaseItinerary
#[ORM\JoinColumn(nullable: false)]
private ?Location $originLocation = null;
#[ORM\Column(type: Types::TIME_MUTABLE, nullable: true)]
private ?\DateTimeInterface $arrival = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
private ?Location $destLocation = null;
@ -43,9 +45,6 @@ class CaseItinerary
#[ORM\JoinColumn(nullable: false)]
private ?MemberCase $memberCase = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $date = null;
#[ORM\Column(nullable: true)]
private ?float $distance = null;
@ -81,18 +80,6 @@ class CaseItinerary
return $this;
}
public function getArrival(): ?\DateTimeInterface
{
return $this->arrival;
}
public function setArrival(?\DateTimeInterface $arrival): static
{
$this->arrival = $arrival;
return $this;
}
public function getDestLocation(): ?Location
{
return $this->destLocation;
@ -132,7 +119,7 @@ class CaseItinerary
public function calcDuration()
{
$this->duration = $this->departure - $this->arrival;
//$this->duration = $this->departure - $this->arrival;
}
public function getMemberCase(): ?MemberCase
@ -203,10 +190,13 @@ class CaseItinerary
public function destinationInfoWindow(): string
{
/** @var DateTime $arrival */
$arrival = $this->departure;
$arrival->add($this->duration);
return <<<EOL
{$this->destLocation->getName()}<br/>
<a href='http://maps.google.com/?q={$this->destLocation->getLat()},{$this->destLocation->getLon()}'>{$this->destLocation->getFormattedAddress()}</a><br/>
{$this->arrival->format("g:i a")}
{$arrival->format("g:i a")}
EOL;
}
}

View File

@ -1,8 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Repository\CaseLocationRepository;
use App\Entity\System\Location;
use App\Repository\Case\CaseLocationRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;

View File

@ -1,11 +1,11 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\GenderType;
use App\Enums\RaceType;
use App\Enums\RelationshipType;
use App\Repository\MemberRepository;
use App\Enums\System\GenderType;
use App\Enums\Case\RaceType;
use App\Enums\Case\RelationshipType;
use App\Repository\Case\MemberRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
@ -103,11 +103,19 @@ class Member
#[ORM\Column]
private ?bool $dcsApproved = null;
private ?bool $checked = false;
public function getId(): ?Uuid
{
return $this->id;
}
public function setId(?Uuid $id): static
{
$this->id = $id;
return $this;
}
public function getCaseId(): ?MemberCase
{
return $this->memberCase;
@ -451,4 +459,16 @@ class Member
return $this;
}
public function isChecked(): bool
{
return $this->checked;
}
public function setChecked(bool $checked): static
{
$this->checked = $checked;
return $this;
}
}

View File

@ -1,11 +1,14 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\CaseLevel;
use App\Enums\County;
use App\Entity\Staff\StaffNote;
use App\Entity\System\ReferralSource;
use App\Entity\System\UserCase;
use App\Enums\Case\CaseLevel;
use App\Enums\System\County;
use App\Enums\Case\ReferralType;
use App\Repository\MemberCaseRepository;
use App\Repository\Case\MemberCaseRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
@ -110,6 +113,9 @@ class MemberCase
#[ORM\OneToMany(targetEntity: StaffNote::class, mappedBy: 'memberCase')]
private Collection $staffNotes;
#[ORM\Column]
private ?int $rate = null;
public function __construct()
{
$this->userCases = new ArrayCollection();
@ -506,4 +512,22 @@ class MemberCase
return $this;
}
public function emptyStaffNotes(): static
{
$this->staffNotes->clear();
return $this;
}
public function getRate(): ?int
{
return $this->rate;
}
public function setRate(int $rate): static
{
$this->rate = $rate;
return $this;
}
}

View File

@ -1,8 +1,10 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Repository\MemberDocumentRepository;
use App\Entity\Company\CompanyDocument;
use App\Entity\System\User;
use App\Repository\Case\MemberDocumentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
@ -41,6 +43,9 @@ class MemberDocument
#[ORM\Column(nullable: true)]
private ?array $workerSignature = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $docData = null;
public function getId(): ?Uuid
{
return $this->id;
@ -129,4 +134,16 @@ class MemberDocument
return $this;
}
public function getDocData(): ?string
{
return $this->docData;
}
public function setDocData(?string $docData): static
{
$this->docData = $docData;
return $this;
}
}

View File

@ -0,0 +1,115 @@
<?php
namespace App\Entity\Case;
use App\Repository\Case\MonthlyCaseNoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;
#[ORM\Entity(repositoryClass: MonthlyCaseNoteRepository::class)]
class MonthlyCaseNote
{
#[ORM\Id]
#[ORM\Column(type: UuidType::NAME, unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private ?Uuid $id = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $reason = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $familyStrength = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $recAndProgress = null;
#[ORM\ManyToOne(inversedBy: 'monthlyCaseNotes')]
#[ORM\JoinColumn(nullable: false)]
private ?MemberCase $memberCase = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $date = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $nextVisit = null;
public function getId(): ?Uuid
{
return $this->id;
}
public function getReason(): ?string
{
return $this->reason;
}
public function setReason(?string $reason): static
{
$this->reason = $reason;
return $this;
}
public function getFamilyStrength(): ?string
{
return $this->familyStrength;
}
public function setFamilyStrength(?string $familyStrength): static
{
$this->familyStrength = $familyStrength;
return $this;
}
public function getRecAndProgress(): ?string
{
return $this->recAndProgress;
}
public function setRecAndProgress(?string $recAndProgress): static
{
$this->recAndProgress = $recAndProgress;
return $this;
}
public function getMemberCase(): ?MemberCase
{
return $this->memberCase;
}
public function setMemberCase(?MemberCase $memberCase): static
{
$this->memberCase = $memberCase;
return $this;
}
public function getDate(): ?\DateTimeInterface
{
return $this->date;
}
public function setDate(\DateTimeInterface $date): static
{
$this->date = $date;
return $this;
}
public function getNextVisit(): ?\DateTimeInterface
{
return $this->nextVisit;
}
public function setNextVisit(\DateTimeInterface $nextVisit): static
{
$this->nextVisit = $nextVisit;
return $this;
}
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\NoteLocation;
use App\Enums\NoteMethod;
use App\Enums\NoteStatus;
use App\Repository\NoteRepository;
use App\Enums\Case\NoteLocation;
use App\Enums\Case\NoteMethod;
use App\Enums\Case\NoteStatus;
use App\Repository\Case\NoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\MappedSuperclass;

View File

@ -1,12 +1,10 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\DischargeReason;
use App\Enums\ReferralServiceType;
use App\Repository\ReferralRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use App\Enums\Case\DischargeReason;
use App\Enums\Case\ReferralServiceType;
use App\Repository\Case\ReferralRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;

View File

@ -1,9 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\ReferralServiceType;
use App\Repository\StandardNoteRepository;
use App\Enums\Case\ReferralServiceType;
use App\Repository\Case\StandardNoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use JsonSerializable;
@ -30,8 +30,8 @@ class StandardNote extends Note implements JsonSerializable
{
$members = [];
foreach ($this->getMembers() as $member) {
/** @var Member $member */
$members[] = $member->getName();
/** @var StandardNoteMember $member */
$members[] = $member->getPerson()->getName();
}
return [
'id' => $this->getId()->toString(),

View File

@ -1,8 +1,8 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Repository\StandardNoteMemberRepository;
use App\Repository\Case\StandardNoteMemberRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;

View File

@ -1,10 +1,10 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Enums\ReferralServiceType;
use App\Enums\VisitQualityLevel;
use App\Repository\VisitNoteRepository;
use App\Enums\Case\ReferralServiceType;
use App\Enums\Case\VisitQualityLevel;
use App\Repository\Case\VisitNoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use JsonSerializable;
@ -166,8 +166,8 @@ class VisitNote extends Note implements JsonSerializable
{
$members = [];
foreach ($this->getMembers() as $member) {
/** @var Member $member */
$members[] = $member->getName();
/** @var VisitNoteMembers $member */
$members[] = $member->getPerson()->getName();
}
return [
'id' => $this->getId()->toString(),

View File

@ -1,8 +1,8 @@
<?php
namespace App\Entity;
namespace App\Entity\Case;
use App\Repository\VisitNoteMembersRepository;
use App\Repository\Case\VisitNoteMembersRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;

View File

@ -1,8 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\Company;
use App\Repository\CompanyRepository;
use App\Entity\System\User;
use App\Repository\Company\CompanyRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
@ -51,6 +52,9 @@ class Company
#[ORM\Column(type: Types::STRING, length: 255, nullable: true)]
private ?string $companyLogo = null;
#[ORM\Column(length: 64)]
private ?string $vendorId = null;
/**
* @var Collection<int, User>
*/
@ -233,6 +237,18 @@ class Company
return $this;
}
public function getVendorId(): ?string
{
return $this->vendorId;
}
public function setVendorId(string $vendorId): static
{
$this->vendorId = $vendorId;
return $this;
}
public function __toString(): string
{
$url = ($this->url ? "<br/><a href='$this->url' target='_blank'>$this->url</a>" : '');

View File

@ -1,9 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\Company;
use App\Enums\DocumentExtras;
use App\Repository\CompanyDocumentRepository;
use App\Enums\Company\DocumentExtras;
use App\Repository\Company\CompanyDocumentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
@ -34,6 +34,8 @@ class CompanyDocument
#[ORM\Column(type: Types::JSON, enumType: DocumentExtras::class, nullable: true)]
private array $extras = [];
private bool $selected = false;
public function getId(): ?Uuid
{
return $this->id;
@ -87,6 +89,18 @@ class CompanyDocument
return $this;
}
public function isSelected(): bool
{
return $this->selected;
}
public function setSelected(): static
{
$this->selected = true;
return $this;
}
public function getExtras(): array
{
return $this->extras;

View File

@ -1,12 +1,13 @@
<?php
namespace App\Entity;
namespace App\Entity\Resources;
use App\Enums\County;
use App\Enums\ResourceType;
use App\Enums\State;
use App\Entity\System\Location;
use App\Enums\System\County;
use App\Enums\Case\ResourceType;
use App\Enums\System\State;
use App\Libs\Libs;
use App\Repository\CommunityResourceRepository;
use App\Repository\Resources\CommunityResourceRepository;
use DateTime;
use DateTimeZone;
use Doctrine\DBAL\Types\Types;
@ -683,4 +684,19 @@ class CommunityResource
{$this->getContactCard()}
EOL;
}
public function toLocation(): Location
{
$loc = new Location();
$loc->setName($this->name)
->setAddress($this->address)
->setCity($this->city)
->setState($this->state)
->setZip($this->zip)
->setLat($this->lat)
->setLon($this->lon)
;
return $loc;
}
}

View File

@ -1,9 +1,10 @@
<?php
namespace App\Entity;
namespace App\Entity\Staff;
use App\Enums\ReferralServiceType;
use App\Repository\StaffNoteRepository;
use App\Entity\Case\MemberCase;
use App\Enums\Case\ReferralServiceType;
use App\Repository\Staff\StaffNoteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

View File

@ -1,8 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\Staff;
use App\Repository\SupervisionRepository;
use App\Entity\System\User;
use App\Repository\Staff\SupervisionRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;

View File

@ -1,9 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\System;
use App\Enums\State;
use App\Repository\LocationRepository;
use App\Enums\System\State;
use App\Repository\System\LocationRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;

View File

@ -1,9 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\System;
use App\Enums\MessageType;
use App\Repository\MessagesRepository;
use App\Enums\System\MessageType;
use App\Repository\System\MessagesRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;

View File

@ -1,8 +1,8 @@
<?php
namespace App\Entity;
namespace App\Entity\System;
use App\Repository\ReferralSourceRepository;
use App\Repository\System\ReferralSourceRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;

View File

@ -0,0 +1,86 @@
<?php
namespace App\Entity\System;
use App\Enums\System\UserSubscriptions;
use App\Repository\System\SubscriptionRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;
#[ORM\Entity(repositoryClass: SubscriptionRepository::class)]
class Subscription
{
#[ORM\Id]
#[ORM\Column(type: UuidType::NAME, unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private ?Uuid $id = null;
#[ORM\ManyToOne(inversedBy: 'subscriptions')]
#[ORM\JoinColumn(nullable: false)]
private ?User $user = null;
#[ORM\Column]
private ?bool $active = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $expiration = null;
#[ORM\Column(enumType: UserSubscriptions::class)]
private ?UserSubscriptions $level = null;
public function getId(): ?Uuid
{
return $this->id;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): static
{
$this->user = $user;
return $this;
}
public function isActive(): ?bool
{
return $this->active;
}
public function setActive(bool $active): static
{
$this->active = $active;
return $this;
}
public function getExpiration(): ?\DateTimeInterface
{
return $this->expiration;
}
public function setExpiration(\DateTimeInterface $expiration): static
{
$this->expiration = $expiration;
return $this;
}
public function getLevel(): ?UserSubscriptions
{
return $this->level;
}
public function setLevel(UserSubscriptions $level): static
{
$this->level = $level;
return $this;
}
}

View File

@ -1,10 +1,11 @@
<?php
namespace App\Entity;
namespace App\Entity\System;
use App\Repository\UserRepository;
use App\Enums\RateType;
use App\Enums\CaseLevel;
use App\Entity\Company\Company;
use App\Repository\System\UserRepository;
use App\Enums\System\RateType;
use App\Enums\Case\CaseLevel;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
@ -95,9 +96,16 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
private ?User $supervisor = null;
/**
* @var Collection<int, Subscription>
*/
#[ORM\OneToMany(targetEntity: Subscription::class, mappedBy: 'user', orphanRemoval: true)]
private Collection $subscriptions;
public function __construct()
{
$this->userCases = new ArrayCollection();
$this->subscriptions = new ArrayCollection();
}
public function getId(): ?Uuid
@ -418,6 +426,18 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
public function generateVCard(): string
{
list($fname, $lname) = explode(' ', $this->name, 2);
$b64image = null;
$fileExt = null;
if ($this->imageName) {
$fullFileName = dirname(dirname(__DIR__))."/public/{$_ENV['USER_IMAGE_PATH']}/{$this->imageName}";
$fileExt = strtoupper(pathinfo($fullFileName, PATHINFO_EXTENSION));
$b64image = base64_encode(
file_get_contents($fullFileName)
);
}
return 'BEGIN:VCARD' .
"\nVERSION:3.0" .
"\nN:{$lname};{$fname}" .
@ -426,6 +446,37 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
($this->workPhone ? "\nTEL;TYPE=WORK,VOICE:$this->workPhone" : null) .
($this->email ? "\nEMAIL;TYPE=WORK,INTERNET:$this->email" : null) .
"\nREV:" . date('c') .
($this->imageName ? "\nPHOTO;TYPE={$fileExt};ENCODING=b:{$b64image}" : null) .
"\nEND:VCARD";
}
/**
* @return Collection<int, Subscription>
*/
public function getSubscriptions(): Collection
{
return $this->subscriptions;
}
public function addSubscription(Subscription $subscription): static
{
if (!$this->subscriptions->contains($subscription)) {
$this->subscriptions->add($subscription);
$subscription->setUser($this);
}
return $this;
}
public function removeSubscription(Subscription $subscription): static
{
if ($this->subscriptions->removeElement($subscription)) {
// set the owning side to null (unless already changed)
if ($subscription->getUser() === $this) {
$subscription->setUser(null);
}
}
return $this;
}
}

View File

@ -1,9 +1,9 @@
<?php
namespace App\Entity;
namespace App\Entity\System;
use App\Enums\CaseLevel;
use App\Repository\UserCaseRepository;
use App\Entity\Case\MemberCase;
use App\Repository\System\UserCaseRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: UserCaseRepository::class)]

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum CaseLevel: int
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum DischargeReason: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum NoteLocation: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum NoteMethod: int
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum NoteStatus: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum RaceType: string
{

View File

@ -1,10 +1,11 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum ReferralServiceType: string
{
case FE_FF = 'FE-FF';
case VS_THBB = 'VS-THBB';
case VS_THBBT = 'VS-THBBT';
case VS_THBBCT = 'VS-THBBCT';
}

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum RelationshipType: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum ResourceType: int
{
@ -9,4 +9,5 @@ enum ResourceType: int
case JOB_OPENINGS = 2;
case HOUSING = 3;
case PARENT_SUPPORT = 4;
case PLAY_AREA = 5;
}

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Case;
enum VisitQualityLevel: int
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\Company;
enum DocumentExtras: int
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum County: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum GenderType: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum JobType: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum MessageType: int
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum RateType: string
{

View File

@ -1,6 +1,6 @@
<?php
namespace App\Enums;
namespace App\Enums\System;
enum State: string
{

View File

@ -0,0 +1,10 @@
<?php
namespace App\Enums\System;
enum UserSubscriptions: int
{
case Free = 0;
case Basic = 1;
case Pro = 2;
}

View File

@ -3,8 +3,8 @@
namespace App\Factory;
use App\DataTransferObject\CompanyDetailsDto;
use App\Entity\Company;
use App\Entity\User;
use App\Entity\Company\Company;
use App\Entity\System\User;
final class CompanyFactory
{

View File

@ -2,10 +2,10 @@
namespace App\Factory;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\User;
use App\Enums\MessageType;
use App\Entity\Case\MemberCase;;
use App\Entity\System\Messages;
use App\Entity\System\User;
use App\Enums\System\MessageType;
use DateTimeImmutable;
class MessageFactory

View File

@ -1,38 +0,0 @@
<?php
namespace App\Form;
use App\Entity\CaseDocument;
use App\Entity\CompanyDocument;
use App\Entity\Member;
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CaseDocumentFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$docs = $options['docs'];
$builder
->add('document', EntityType::class, [
'class' => CompanyDocument::class,
'choices' => $docs,
'multiple' => true,
'expanded' => true,
'choice_label' => 'title',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => CaseDocument::class,
'docs' => [],
]);
}
}

View File

@ -2,10 +2,8 @@
namespace App\Form;
use App\Enums\DocumentExtras;
use App\Entity\Company;
use App\Entity\CompanyDocument;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Enums\Company\DocumentExtras;
use App\Entity\Company\CompanyDocument;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\AbstractType;

View File

@ -45,6 +45,7 @@ class CompanyFormType extends AbstractType
])
->add('url', UrlType::class)
->add('companyLogo', FileType::class)
->add('vendorId', TextType::class)
;
}

View File

@ -2,10 +2,9 @@
namespace App\Form;
use App\Entity\User;
use App\Enums\CaseLevel;
use App\Enums\JobType;
use App\Enums\RateType;
use App\Entity\System\User;
use App\Enums\Case\CaseLevel;
use App\Enums\System\RateType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;

View File

@ -2,7 +2,7 @@
namespace App\Form;
use App\Entity\Company;
use App\Entity\Company\Company;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;

View File

@ -2,10 +2,8 @@
namespace App\Form;
use App\Entity\Location;
use App\Entity\MemberCase;
use App\Enums\State;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\System\Location;
use App\Enums\System\State;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\FormBuilderInterface;

View File

@ -2,15 +2,16 @@
namespace App\Form;
use App\Entity\MemberCase;
use App\Entity\ReferralSource;
use App\Enums\CaseLevel;
use App\Enums\County;
use App\Entity\Case\MemberCase;;
use App\Entity\System\ReferralSource;
use App\Enums\Case\CaseLevel;
use App\Enums\System\County;
use App\Enums\Case\ReferralType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
@ -65,6 +66,9 @@ class MemberCaseFormType extends AbstractType
->add('county', EnumType::class, [
'class' => County::class,
])
->add('rate', NumberType::class, [
'required' => true
])
;
}

View File

@ -2,11 +2,11 @@
namespace App\Form;
use App\Entity\CompanyDocument;
use App\Entity\Member;
use App\Enums\GenderType;
use App\Enums\RaceType;
use App\Enums\RelationshipType;
use App\Entity\Company\CompanyDocument;
use App\Entity\Case\Member;
use App\Enums\System\GenderType;
use App\Enums\Case\RaceType;
use App\Enums\Case\RelationshipType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

View File

@ -2,11 +2,9 @@
namespace App\Form;
use App\Entity\MemberCase;
use App\Entity\Referral;
use App\Enums\DischargeReason;
use App\Enums\ReferralServiceType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Case\Referral;
use App\Enums\Case\DischargeReason;
use App\Enums\Case\ReferralServiceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\FormBuilderInterface;

View File

@ -2,7 +2,7 @@
namespace App\Form;
use App\Entity\ReferralSource;
use App\Entity\System\ReferralSource;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

View File

@ -2,7 +2,7 @@
namespace App\Form;
use App\Entity\User;
use App\Entity\System\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;

View File

@ -2,10 +2,10 @@
namespace App\Form;
use App\Entity\CommunityResource;
use App\Enums\County;
use App\Enums\ResourceType;
use App\Enums\State;
use App\Entity\Resources\CommunityResource;
use App\Enums\Case\ResourceType;
use App\Enums\System\County;
use App\Enums\System\State;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;

View File

@ -2,9 +2,8 @@
namespace App\Form;
use App\Entity\Member;
use App\Entity\StaffNote;
use App\Enums\ReferralServiceType;
use App\Entity\Staff\StaffNote;
use App\Enums\Case\ReferralServiceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;

View File

@ -2,15 +2,13 @@
namespace App\Form;
use App\Entity\Member;
use App\Entity\Referral;
use App\Entity\StandardNote;
use App\Enums\NoteLocation;
use App\Enums\NoteMethod;
use App\Enums\NoteStatus;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Case\StandardNote;
use App\Enums\Case\NoteLocation;
use App\Enums\Case\NoteMethod;
use App\Enums\Case\NoteStatus;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
@ -20,6 +18,11 @@ class StandardNoteFormType extends AbstractType
{
$members = $options['members'];
$ids = [];
foreach ($members as $idx => $member) {
$ids[$idx] = $member->getId()->toString();
}
$builder
->add('date', null, [
'widget' => 'single_text',
@ -43,12 +46,19 @@ class StandardNoteFormType extends AbstractType
'placeholder' => 'Note',
],
])
->add('members', EntityType::class, [
'class' => Member::class,
->add('members', ChoiceType::class, [
//'class' => Member::class,
'choices' => $members,
'choice_attr' => function ($member) {
return [
'checked' => $member->isChecked(),
'value' => $member->getId()->toString()
];
},
'multiple' => true,
'expanded' => true,
'choice_label' => 'name',
'mapped' => false,
])
->add('method', EnumType::class, [
'class' => NoteMethod::class,

View File

@ -2,12 +2,10 @@
namespace App\Form;
use App\Entity\Supervision;
use App\Entity\User;
use Doctrine\ORM\Mapping\Entity;
use App\Entity\Staff\Supervision;
use App\Entity\System\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

View File

@ -2,10 +2,8 @@
namespace App\Form;
use App\Entity\MemberCase;
use App\Entity\StaffNote;
use App\Enums\ReferralServiceType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Staff\StaffNote;
use App\Enums\Case\ReferralServiceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;

View File

@ -2,8 +2,8 @@
namespace App\Form;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

View File

@ -2,10 +2,9 @@
namespace App\Form;
use App\Entity\User;
use App\Enums\CaseLevel;
use App\Enums\JobType;
use App\Enums\RateType;
use App\Entity\System\User;
use App\Enums\Case\CaseLevel;
use App\Enums\System\RateType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;

View File

@ -2,14 +2,14 @@
namespace App\Form;
use App\Entity\Member;
use App\Entity\VisitNote;
use App\Enums\NoteLocation;
use App\Enums\NoteMethod;
use App\Enums\NoteStatus;
use App\Enums\VisitQualityLevel;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Case\Member;
use App\Entity\Case\VisitNote;
use App\Enums\Case\NoteLocation;
use App\Enums\Case\NoteMethod;
use App\Enums\Case\NoteStatus;
use App\Enums\Case\VisitQualityLevel;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
@ -20,6 +20,11 @@ class VisitNoteFormType extends AbstractType
{
$members = $options['members'];
$ids = [];
foreach ($members as $idx => $member) {
$ids[$idx] = $member->getId()->toString();
}
$builder
->add('date', null, [
'widget' => 'single_text',
@ -58,12 +63,19 @@ class VisitNoteFormType extends AbstractType
->add('childFocused', EnumType::class, [
'class' => VisitQualityLevel::class
])
->add('members', EntityType::class, [
'class' => Member::class,
->add('members', ChoiceType::class, [
//'class' => Member::class,
'choices' => $members,
'choice_attr' => function ($member) {
return [
'checked' => $member->isChecked(),
'value' => $member->getId()->toString()
];
},
'multiple' => true,
'expanded' => true,
'choice_label' => 'name',
'mapped' => false,
])
->add('method', EnumType::class, [
'class' => NoteMethod::class

View File

@ -2,12 +2,14 @@
namespace App\Libs;
use App\Entity\Location;
use App\Entity\Messages;
use App\Entity\User;
use App\Entity\Case\MemberCase;
use App\Entity\Staff\Supervision;
use App\Entity\System\Location;
use App\Entity\System\Messages;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class Libs extends AbstractController
{
@ -66,27 +68,6 @@ class Libs extends AbstractController
return null;
}
#[Route('/api/autocomplete-address/{searchText}', name: 'app_api_autocomplete_address')]
public function autocompleteAddress(string $searchText): Response
{
$params = [
'text' => $searchText,
'format' => 'json',
'apiKey' => $_ENV['GEOAPIFY_API_KEY']
];
$url = "https://api.geoapify.com/v1/autocomplete?".http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($ch);
curl_close($ch);
return AbstractController::json($result);
}
public static function Phone(string $phone): string
{
$phone = preg_replace('/[^0-9]/', '', $phone);
@ -108,4 +89,41 @@ class Libs extends AbstractController
return $msgs;
}
/**
* Checks if the user has permission to access a case.
*
* @param User $user
* @param MemberCase $case
* @param EntityManagerInterface $em
*
* @return bool
*/
public static function checkPermissions(User $user, MemberCase $case, EntityManagerInterface $em): bool
{
// if user is an admin, allow the action
if (in_array('ROLE_ADMIN', $user->getRoles())) {
return true;
}
// if user is assigned to this case, allow the action
$uc = $em->getRepository(UserCase::class)->findOneBy(['user' => $user, 'memberCase' => $case]);
if ($uc) {
return true;
}
// get user of the case and check if user is a supervisor of the worker
/** @var ?UserCase $uc */
$uc = $em->getRepository(UserCase::class)->findOneBy(['memberCase' => $case]);
if ($uc) {
$sup = $em->getRepository(Supervision::class)->findOneBy(['supervisor' => $user, 'worker' => $uc->getUser()]);
if ($sup) {
return true;
}
}
// user does not have permissions to the case
return false;
}
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\CaseItinerary;
use App\Entity\MemberCase;
use App\Entity\User;
use App\Entity\UserCase;
use App\Entity\Case\CaseItinerary;
use App\Entity\Case\MemberCase;;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use DateTime;
use DateTimeZone;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
@ -42,7 +42,7 @@ class CaseItineraryRepository extends ServiceEntityRepository
}
$query->orderBy('ci.date', 'DESC')
->addOrderBy('ci.arrival', 'DESC');
->addOrderBy('ci.departure', 'DESC');
//dd($query->getQuery());
@ -60,7 +60,7 @@ class CaseItineraryRepository extends ServiceEntityRepository
->andWhere('ci.date >= :from')
->setParameter('from', $startDate->format('Y-01-01'))
->orderBy('ci.date', 'DESC')
->addOrderBy('ci.arrival', 'DESC')
->addOrderBy('ci.departure', 'DESC')
;
return $query->getQuery()->getResult();
@ -77,7 +77,7 @@ class CaseItineraryRepository extends ServiceEntityRepository
->andWhere('ci.date >= :from')
->setParameter('from', $startDate->modify('-30 days')->format('Y-m-d'))
->orderBy('ci.date', 'DESC')
->addOrderBy('ci.arrival', 'DESC')
->addOrderBy('ci.departure', 'DESC')
;
return $query->getQuery()->getResult();

View File

@ -1,10 +1,10 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\CaseLocation;
use App\Entity\Location;
use App\Entity\MemberCase;
use App\Entity\Case\CaseLocation;
use App\Entity\System\Location;
use App\Entity\Case\MemberCase;;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

View File

@ -1,9 +1,9 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\Company;
use App\Entity\MemberCase;
use App\Entity\Company\Company;
use App\Entity\Case\MemberCase;;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

View File

@ -1,10 +1,9 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\MemberDocument;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\Case\MemberDocument;
use App\Entity\Case\Member;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
@ -18,6 +17,18 @@ class MemberDocumentRepository extends ServiceEntityRepository
parent::__construct($registry, MemberDocument::class);
}
public function removeUnsigned(Member $member)
{
$conn = $this->getEntityManager()->getConnection();
$sql = "DELETE FROM member_document WHERE client_id = :client_id AND client_signed IS NULL";
$stmt = $conn->prepare($sql);
$result = $stmt->executeQuery([
'client_id' => $member->getId()->toBinary()
]);
return $result;
}
// /**
// * @return CaseDocument[] Returns an array of CaseDocument objects
// */

View File

@ -0,0 +1,130 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;
use App\Entity\Case\Note;
use App\Entity\Case\StandardNote;
use App\Entity\Case\VisitNote;
use App\Enums\Case\RelationshipType;
use App\Enums\System\GenderType;
;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Uid\Uuid;
/**
* @extends ServiceEntityRepository<Member>
*/
class MemberRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Member::class);
}
public function getCaseMembersByName(MemberCase $case): array
{
return $this->createQueryBuilder('m')
->andWhere('m.memberCase = :case')
->setParameter('case', $case->getId()->toBinary())
->orderBy('m.lastName, m.firstName', 'ASC')
->getQuery()
->getResult()
;
}
public function getMembersByCaseAndNote(MemberCase $case, Note $note)
{
$table = 'standard_note_member';
if ($note instanceof VisitNote) {
$table = 'visit_note_members';
}
$conn = $this->getEntityManager()->getConnection();
$sql = "SELECT m.*,
(
SELECT COUNT(1)
FROM {$table} n
WHERE n.note_id = :note_id
AND
n.person_id = m.id
) as 'checked'
FROM member m
JOIN member_case mc ON mc.id = m.member_case_id
WHERE
mc.id = :case_id";
$stmt = $conn->prepare($sql);
$result = $stmt->executeQuery([
'note_id' => $note->getId()->toBinary(),
'case_id' => $case->getId()->toBinary()
]);
$res = [];
foreach ($result->fetchAllAssociative() as $row) {
$member = new Member();
$member->setId(Uuid::fromBinary($row['id']))
->setCaseId($this->getEntityManager()->find(MemberCase::class, Uuid::fromBinary($row['member_case_id'])))
->setFirstName($row['first_name'])
->setLastName($row['last_name'])
->setRelationship(RelationshipType::from($row['relationship']))
->setPersonalId($row['personal_id'])
->setGender(GenderType::from($row['gender']))
->setDob(new \DateTime($row['dob']))
->setLanguage($row['language'])
->setEmergencyContact($row['emergency_contact'])
->setPhone($row['phone'])
->setDayPhone($row['day_phone'])
->setEveningPhone($row['evening_phone'])
->setCellPhone($row['cell_phone'])
->setEmail($row['email'])
->setSchool($row['school'])
->setAddress($row['address'])
->setCity($row['city'])
->setState($row['state'])
->setZip($row['zip'])
->setMaritalStatus($row['marital_status'])
->setChild($row['is_child'])
->setParent($row['is_parent'])
->setAdultChild($row['is_adult_child'])
->setLegalGuardian($row['is_legal_guardian'])
->setParentsLiveTogether($row['parents_live_together'])
->setDcsApproved($row['dcs_approved'])
->setChecked($row['checked'])
;
$res[] = $member;
}
return $res;
}
// /**
// * @return Member[] Returns an array of Member objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('m.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?Member
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@ -1,35 +1,23 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\Member;
use App\Entity\MemberCase;
use App\Entity\Case\MonthlyCaseNote;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Member>
* @extends ServiceEntityRepository<MonthlyCaseNote>
*/
class MemberRepository extends ServiceEntityRepository
class MonthlyCaseNoteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Member::class);
}
public function getCaseMembersByName(MemberCase $case): array
{
return $this->createQueryBuilder('m')
->andWhere('m.memberCase = :case')
->setParameter('case', $case->getId()->toBinary())
->orderBy('m.lastName, m.firstName', 'ASC')
->getQuery()
->getResult()
;
parent::__construct($registry, MonthlyCaseNote::class);
}
// /**
// * @return Member[] Returns an array of Member objects
// * @return MonthlyCaseNote[] Returns an array of MonthlyCaseNote objects
// */
// public function findByExampleField($value): array
// {
@ -43,7 +31,7 @@ class MemberRepository extends ServiceEntityRepository
// ;
// }
// public function findOneBySomeField($value): ?Member
// public function findOneBySomeField($value): ?MonthlyCaseNote
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')

View File

@ -1,9 +1,9 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\Note;
use App\Entity\Referral;
use App\Entity\Case\Note;
use App\Entity\Case\Referral;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

View File

@ -1,10 +1,10 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\MemberCase;
use App\Entity\Referral;
use App\Enums\ReferralServiceType;
use App\Entity\Case\MemberCase;;
use App\Entity\Case\Referral;
use App\Enums\Case\ReferralServiceType;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Persistence\ManagerRegistry;
@ -57,10 +57,10 @@ class ReferralRepository extends ServiceEntityRepository
public function populateNotes(Referral &$referral): void
{
$noteType = 'App\Entity\StandardNote';
$noteType = 'App\Entity\Case\StandardNote';
if ($referral->getServiceCode() == ReferralServiceType::VS_THBB) {
$noteType = 'App\Entity\VisitNote';
$noteType = 'App\Entity\Case\VisitNote';
}
$query = $this->getEntityManager()->createQuery("
@ -74,8 +74,6 @@ class ReferralRepository extends ServiceEntityRepository
if (!count($res)){
return;
}
$referral->setNotes(new ArrayCollection($res));
}
// /**

View File

@ -1,8 +1,8 @@
<?php
namespace App\Repository;
namespace App\Repository\Case;
use App\Entity\StandardNoteMember;
use App\Entity\Case\StandardNoteMember;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

Some files were not shown because too many files have changed in this diff Show More