ref: Repositories

* Refactor all files
This commit is contained in:
2025-01-28 20:59:14 -05:00
parent 593958cc68
commit 9887889ecb
23 changed files with 222 additions and 76 deletions

View File

@@ -0,0 +1,110 @@
<?php
namespace App\Repository\Case;
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;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<CaseItinerary>
*/
class CaseItineraryRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CaseItinerary::class);
}
public function getRecentTravel(User $user, ?array $params = null): ?array
{
$query = $this->createQueryBuilder('ci')
->leftJoin(UserCase::class, 'uc', 'WITH', 'uc.memberCase = ci.memberCase')
->andWhere('uc.user = :user')
->setParameter('user', $user->getId()->toBinary())
;
if (isset($params['case']) && is_a($params['case'], MemberCase::class)) {
$query->andWhere('ci.memberCase = :case')->setParameter('case', $params['case']->getId()->toBinary());
}
if (isset($params['from']) && is_a($params['from'], \DateTime::class)) {
$query->andWhere('ci.date >= :from')->setParameter('from', $params['from']->format('Y-m-d'));
}
if (isset($params['to']) && is_a($params['to'], \DateTime::class)) {
$query->andWhere('ci.date <= :to')->setParameter('to', $params['to']->format('Y-m-d'));
}
$query->orderBy('ci.date', 'DESC')
->addOrderBy('ci.departure', 'DESC');
//dd($query->getQuery());
return $query->getQuery()->getResult();
}
public function getYTDTravel(User $user): ?array
{
$startDate = new DateTime('now', new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
$query = $this->createQueryBuilder('ci')
->leftJoin(UserCase::class, 'uc', 'WITH', 'uc.memberCase = ci.memberCase')
->andWhere('uc.user = :user')
->setParameter('user', $user->getId()->toBinary())
->andWhere('ci.date >= :from')
->setParameter('from', $startDate->format('Y-01-01'))
->orderBy('ci.date', 'DESC')
->addOrderBy('ci.departure', 'DESC')
;
return $query->getQuery()->getResult();
}
public function getTravelLast30Days(User $user): ?array
{
$startDate = new DateTime('now', new DateTimeZone($_ENV['COMPANY_TIMEZONE']));
$query = $this->createQueryBuilder('ci')
->leftJoin(UserCase::class, 'uc', 'WITH', 'uc.memberCase = ci.memberCase')
->andWhere('uc.user = :user')
->setParameter('user', $user->getId()->toBinary())
->andWhere('ci.date >= :from')
->setParameter('from', $startDate->modify('-30 days')->format('Y-m-d'))
->orderBy('ci.date', 'DESC')
->addOrderBy('ci.departure', 'DESC')
;
return $query->getQuery()->getResult();
}
// /**
// * @return CaseLocation[] Returns an array of CaseLocation objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('c')
// ->andWhere('c.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('c.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?CaseLocation
// {
// return $this->createQueryBuilder('c')
// ->andWhere('c.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Repository\Case;
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;
/**
* @extends ServiceEntityRepository<CaseLocation>
*/
class CaseLocationRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CaseLocation::class);
}
public function getCaseLocations(MemberCase $case): array
{
return $this->createQueryBuilder('cl')
->leftJoin(Location::class, 'l', 'WITH', 'l.id = cl.location')
->andWhere('cl.memberCase = :case')
->setParameter('case', $case->getId()->toBinary())
->orderBy('l.name', 'ASC')
->getQuery()
->getResult()
;
}
// /**
// * @return CaseLocation[] Returns an array of CaseLocation objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('c')
// ->andWhere('c.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('c.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?CaseLocation
// {
// return $this->createQueryBuilder('c')
// ->andWhere('c.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Repository\Case;
use App\Entity\Company\Company;
use App\Entity\Case\MemberCase;;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<MemberCase>
*/
class MemberCaseRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, MemberCase::class);
}
public function getCompanyCases(Company $company): array
{
return $this->createQueryBuilder('m')
->andWhere('m.company = :company')
->setParameter('company', $company)
->getQuery()
->getResult();
}
// /**
// * @return MemberCase[] Returns an array of MemberCase 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): ?MemberCase
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,56 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\MemberDocument;
use App\Entity\Case\Member;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<CaseDocument>
*/
class MemberDocumentRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
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
// */
// 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): ?CaseDocument
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\Member;
use App\Entity\Case\MemberCase;;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @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()
;
}
// /**
// * @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

@@ -0,0 +1,43 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\MonthlyCaseNote;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<MonthlyCaseNote>
*/
class MonthlyCaseNoteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, MonthlyCaseNote::class);
}
// /**
// * @return MonthlyCaseNote[] Returns an array of MonthlyCaseNote 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): ?MonthlyCaseNote
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,61 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\Note;
use App\Entity\Case\Referral;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Notes>
*/
class NoteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Note::class);
}
public function getHoursUsed(Referral $referral): int
{
$ret = 0;
$query = $this->createQueryBuilder('n')
->select('SUM(n.hours) AS hours')
->andWhere('n.referral = :referral')
->setParameter('referral', $referral->getId()->toBinary())
->getQuery()
//->getResult()
;
dd($query->getSQL());
return $ret;
}
// /**
// * @return Notes[] Returns an array of Notes objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('n')
// ->andWhere('n.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('n.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?Notes
// {
// return $this->createQueryBuilder('n')
// ->andWhere('n.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,103 @@
<?php
namespace App\Repository\Case;
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;
/**
* @extends ServiceEntityRepository<Referral>
*/
class ReferralRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Referral::class);
}
public function getActiveReferrals(MemberCase $case): array
{
$referrals = $this->createQueryBuilder('r')
->andWhere('r.dischargeDate IS NULL')
->andWhere('r.memberCase = :case')
->setParameter('case', $case->getId()->toBinary())
->orderBy('r.hours', 'ASC')
->getQuery()
->getResult()
;
foreach ($referrals as $idx => $ref) {
$this->populateNotes($referrals[$idx]);
}
return $referrals;
}
public function getClosedReferrals(MemberCase $case): array
{
$referrals = $this->createQueryBuilder('r')
->andWhere('r.dischargeDate IS NOT NULL')
->andWhere('r.memberCase = :case')
->setParameter('case', $case->getId()->toBinary())
->orderBy('r.dischargeDate', 'DESC')
->getQuery()
->getResult()
;
foreach ($referrals as $idx => $ref) {
$this->populateNotes($referrals[$idx]);
}
return $referrals;
}
public function populateNotes(Referral &$referral): void
{
$noteType = 'App\Entity\Case\StandardNote';
if ($referral->getServiceCode() == ReferralServiceType::VS_THBB) {
$noteType = 'App\Entity\Case\VisitNote';
}
$query = $this->getEntityManager()->createQuery("
SELECT n
FROM $noteType n
WHERE n.referral = :referral
");
$query->setParameter('referral', $referral->getId()->toBinary());
$res = $query->getResult();
if (!count($res)){
return;
}
}
// /**
// * @return Referral[] Returns an array of Referral objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('r')
// ->andWhere('r.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('r.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?Referral
// {
// return $this->createQueryBuilder('r')
// ->andWhere('r.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,43 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\StandardNoteMember;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<StandardNoteMember>
*/
class StandardNoteMemberRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, StandardNoteMember::class);
}
// /**
// * @return StandardNoteMember[] Returns an array of StandardNoteMember objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('s.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?StandardNoteMember
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,128 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\Referral;
use App\Entity\Case\StandardNote;
use App\Entity\System\User;
use App\Entity\System\UserCase;
use App\Enums\Case\ReferralType;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<StandardNote>
*/
class StandardNoteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, StandardNote::class);
}
public function getOrderedNotes(Referral $referral): array
{
return $this->createQueryBuilder('s')
->andWhere('s.referral = :referral')
->setParameter('referral', $referral->getId()->toBinary())
->orderBy('s.date', 'DESC')
->addOrderBy('s.startTime', 'DESC')
->getQuery()
->getResult()
;
}
public function filterNotes(User $user, array $params = []): array
{
$query = $this->createQueryBuilder('s')
->leftJoin(Referral::class, 'r', 'WITH', 's.referral = r.id')
->leftJoin(UserCase::class, 'uc', 'WITH', 'r.memberCase = uc.memberCase')
->andWhere('uc.user = :user')
->setParameter('user', $user->getId()->toBinary())
;
if ($params['case']) {
$query->andWhere('r.memberCase = :memberCase')
->setParameter('memberCase', $params['case']->getId()->toBinary());
}
if ($params['referral']) {
$query->andWhere('s.referral = :referral')
->setParameter('referral', $params['referral']->getId()->toBinary());
}
if ($params['startDate']) {
$query->andWhere('s.date >= :startDate')
->setParameter('startDate', $params['startDate']);
}
if ($params['endDate']) {
$query->andWhere('s.date <= :endDate')
->setParameter('endDate', $params['endDate']);
}
//dd($query->getQuery()->getResult());
return $query->orderBy('s.date', 'DESC')
->addOrderBy('s.startTime', 'DESC')
->getQuery()
->getResult()
;
}
/**
* Method to return the total time billed
*
* @param User $user
* @param DateTime $startDate
*
* @return int
* Total minutes rounded to the nearest 15 min increment
*/
public function getTotalBillableHours(User $user, DateTime $startDate, ReferralType $referralType = null): array
{
$res = $this->createQueryBuilder('s')
->leftJoin(Referral::class, 'r', 'WITH', 'r.id = s.referral')
->leftJoin(UserCase::class, 'uc', 'WITH', 'uc.memberCase = r.memberCase')
->where('uc.user = :user')
->andWhere('s.date >= :startDate')
->setParameter('user', $user->getId()->toBinary())
->setParameter('startDate', $startDate->format('Y-m-d'))
;
if (null !== $referralType) {
$res->andWhere('r.serviceCode = :referralType')
->setParameter('referralType', $referralType);
}
$ret = $res->getQuery()->getResult();
return $ret;
}
// /**
// * @return StandardNote[] Returns an array of StandardNote objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('s.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?StandardNote
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,43 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\VisitNoteMembers;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<VisitNoteMembers>
*/
class VisitNoteMembersRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, VisitNoteMembers::class);
}
// /**
// * @return VisitNoteMembers[] Returns an array of VisitNoteMembers objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('v')
// ->andWhere('v.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('v.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?VisitNoteMembers
// {
// return $this->createQueryBuilder('v')
// ->andWhere('v.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@@ -0,0 +1,126 @@
<?php
namespace App\Repository\Case;
use App\Entity\Case\Referral;
use App\Entity\System\UserCase;
use App\Entity\System\User;
use App\Entity\Case\VisitNote;
use App\Enums\Case\ReferralType;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<VisitNote>
*/
class VisitNoteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, VisitNote::class);
}
public function getOrderedNotes(Referral $referral): array
{
return $this->createQueryBuilder('v')
->andWhere('v.referral = :referral')
->setParameter('referral', $referral->getId()->toBinary())
->orderBy('v.date', 'DESC')
->addOrderBy('v.startTime', 'DESC')
->getQuery()
->getResult()
;
}
public function filterNotes(User $user, array $params = []): array
{
$query = $this->createQueryBuilder('v')
->leftJoin(Referral::class, 'r', 'WITH', 'v.referral = r.id')
->leftJoin(UserCase::class, 'uc', 'WITH', 'r.memberCase = uc.memberCase')
->andWhere('uc.user = :user')
->setParameter('user', $user->getId()->toBinary())
;
if ($params['case']) {
$query->andWhere('r.memberCase = :memberCase')
->setParameter('memberCase', $params['case']->getId()->toBinary());
}
if ($params['referral']) {
$query->andWhere('v.referral = :referral')
->setParameter('referral', $params['referral']->getId()->toBinary());
}
if ($params['startDate']) {
$query->andWhere('v.date >= :startDate')
->setParameter('startDate', $params['startDate']);
}
if ($params['endDate']) {
$query->andWhere('v.date <= :endDate')
->setParameter('endDate', $params['endDate']);
}
return $query->orderBy('v.date', 'DESC')
->addOrderBy('v.startTime', 'DESC')
->getQuery()
->getResult()
;
}
/**
* Method to return the total time billed
*
* @param User $user
* @param DateTime $startDate
*
* @return int
* Total minutes rounded to the nearest 15 min increment
*/
public function getTotalBillableHours(User $user, DateTime $startDate, ReferralType $referralType = null): array
{
$res = $this->createQueryBuilder('v')
->leftJoin(Referral::class, 'r', 'WITH', 'r.id = v.referral')
->leftJoin(UserCase::class, 'uc', 'WITH', 'uc.memberCase = r.memberCase')
->where('uc.user = :user')
->andWhere('v.date >= :startDate')
->setParameter('user', $user->getId()->toBinary())
->setParameter('startDate', $startDate->format('Y-m-d'))
;
if (null !== $referralType) {
$res->andWhere('r.serviceCode = :referralType')
->setParameter('referralType', $referralType);
}
$ret = $res->getQuery()->getResult();
return $ret;
}
// /**
// * @return VisitNote[] Returns an array of VisitNote objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('v')
// ->andWhere('v.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('v.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?VisitNote
// {
// return $this->createQueryBuilder('v')
// ->andWhere('v.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}