src/Repository/GroupRepository.php line 83

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Repository;
  3. use EADPlataforma\Entity\Course;
  4. use EADPlataforma\Entity\Group;
  5. use EADPlataforma\Entity\Enrollment;
  6. use EADPlataforma\Entity\User;
  7. use EADPlataforma\Entity\Trash;
  8. use EADPlataforma\Enum\GroupEnum;
  9. use EADPlataforma\Enum\EnrollmentEnum;
  10. use EADPlataforma\Enum\TrashEnum;
  11. /**
  12.  * @method Group|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method Group|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method Group[]    findAll()
  15.  * @method Group[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  */
  17. class GroupRepository extends AbstractRepository
  18. {
  19.     public function getEntityClass(){
  20.         return Group::class;
  21.     }
  22.     public function getConnectionName(){
  23.         return "school";
  24.     }
  25.     public function findItems()
  26.     {
  27.         return $this->createQueryBuilder('g')->getQuery()->getResult();
  28.     }
  29.     public function countGroup()
  30.     {
  31.         $query $this->createQueryBuilder('g');
  32.         $query->select("COUNT(g.id) AS total");
  33.         $query->andWhere('g.deleted = :deleted');
  34.         $query->setParameter('deleted'GroupEnum::ITEM_NO_DELETED);
  35.         $result = (object)$query->getQuery()->getOneOrNullResult();
  36.         return $result->total;
  37.     }
  38.     public function insertGroup($data): array
  39.     {
  40.         $typeDateAccess $data['typeDateAccess'] ?? GroupEnum::TYPE_DATE_DEFAULT;
  41.         $typeDateSupport $data['typeDateSupport'] ?? GroupEnum::TYPE_DATE_DEFAULT;
  42.         $dateAccessConclusion $data["dateAccessConclusion"] ?? null;
  43.         $dateAccessDays $data["dateAccessDays"] ?? null;
  44.         $dateSupportConclusion $data["dateSupportConclusion"] ?? null;
  45.         $dateSupportDays $data["dateSupportDays"] ?? null;
  46.         $group = new Group;
  47.         
  48.         $group->setName($data["name"]);
  49.         $group->setTypeDateAccess($typeDateAccess);
  50.         $group->setDateAccessConclusion($dateAccessConclusion);
  51.         $group->setDateAccessDays($dateAccessDays);
  52.         $group->setTypeDateSupport($typeDateSupport);
  53.         $group->setDateSupportConclusion($dateSupportConclusion);
  54.         $group->setDateSupportDays($dateSupportDays);
  55.         $group->setUserManager($data['user']);
  56.         $this->em->persist($group);
  57.         $this->em->flush();
  58.         $data $group->toReturn();
  59.         $this->getLogService()->logInsert("group"$group->getId(), $data);
  60.         return $data;
  61.     }
  62.     public function enrollOneUser(Group $groupUser $user, ?array $courses = [])
  63.     {
  64.         $enrollmentService $this->generalService->getService('EnrollmentService');
  65.         $enrollmentService->enrollUserInGroup($group, [ $user ], $courses);
  66.     }
  67.     
  68.     public function enrollUsers(Group $group, ?array $users = [], ?array $courses = [])
  69.     {
  70.         $enrollmentService $this->generalService->getService('EnrollmentService');
  71.         $enrollmentService->enrollUserInGroup($group$users$courses);
  72.     }
  73.     public function restore(Group $group$typeItem)
  74.     {
  75.         $itemId $group->getId();
  76.         $group->setUserDelete($this->getUser());
  77.         $group->setDateDelete(date('Y-m-d H:i:s'));
  78.         $group->restore();
  79.         $this->em->getRepository(Trash::class)->deleteTrash($itemId$typeItem);
  80.     }
  81.     public function delete(Group $group$typeItem$permission$isTrash$removeEnrollment)
  82.     {
  83.         $userPermissionUtil $this->generalService->getUtil('UserPermissionUtil');
  84.         if(!$group->isOnTrash() && !$group->isDeleted()){
  85.             if(
  86.                 $userPermissionUtil->isMiddle($permission) &&
  87.                 $group->getUserManager()->getId() != $this->getUser()->getId()
  88.             ){
  89.                 return;
  90.             }
  91.         }
  92.         if($removeEnrollment == GroupEnum::YES){
  93.             $enrollments $this->em->getRepository(Enrollment::class)->getEnrollmentsByGroup(
  94.                 $group->getId()
  95.             );
  96.             foreach ($enrollments as $key => $enrollment) {
  97.                 $enrollment->setUserDelete($this->getUser());
  98.                 $enrollment->setDateDelete(date('Y-m-d H:i:s'));
  99.                 $enrollment->trash();
  100.                 $enrollment->cascade();
  101.                 $this->em->getRepository(Trash::class)->insertTrash(
  102.                     $enrollment
  103.                     TrashEnum::ENROLLMENT
  104.                     "Aluno: {$enrollment->getUser()->getName()} | Curso: {$enrollment->getCourse()->getTitle()}"
  105.                 );
  106.             }
  107.         }
  108.         $group->setUserDelete($this->getUser());
  109.         $group->setDateDelete(date('Y-m-d H:i:s'));
  110.         $group->individual();
  111.         if($group->isOnTrash() || $group->isDeleted()){
  112.             $group->delete();
  113.             $itemId $group->getId();
  114.             $this->em->getRepository(Trash::class)->deleteTrash($itemId$typeItem);
  115.         }
  116.         if(!$group->isOnTrash() && !$group->isDeleted()){
  117.             $group->trash();
  118.             $this->em->getRepository(Trash::class)->insertTrash(
  119.                 $group
  120.                 $typeItem
  121.                 $group->getName()
  122.             );
  123.         }
  124.         $this->em->flush();
  125.     }
  126.     public function deleteTrashCron()
  127.     {
  128.         $sql "UPDATE EADPlataforma:Group AS g SET g.deleted = 2 
  129.                 WHERE g.dateDelete <= :date AND g.deleted = 1 ";
  130.         $query $this->em->createQuery($sql);
  131.         $query->setParameter('date'date('Y-m-d H:i:s'strtotime('-90 days')));
  132.         $query->execute();
  133.     }
  134.     public function searchGroup($groupId): ?Group
  135.     {
  136.         return $this->findOneBy([
  137.             "id" => $groupId,
  138.            "deleted" => GroupEnum::ITEM_NO_DELETED
  139.         ]);
  140.     }
  141.     public function updateGroup(Group $group$data): array
  142.     {
  143.         $typeDateAccess $data['typeDateAccess'] ?? GroupEnum::TYPE_DATE_DEFAULT;
  144.         $typeDateSupport $data['typeDateSupport'] ?? GroupEnum::TYPE_DATE_DEFAULT;
  145.         $dateAccessConclusion $data["dateAccessConclusion"] ?? null;
  146.         $dateAccessDays $data["dateAccessDays"] ?? null;
  147.         $dateSupportConclusion $data["dateSupportConclusion"] ?? null;
  148.         $dateSupportDays $data["dateSupportDays"] ?? null;
  149.         $group->setName($data["name"]);
  150.         $group->setTypeDateAccess($typeDateAccess);
  151.         $group->setStatus($data["status"]);
  152.         $group->setTypeDateAccess((int)$data["typeDateAccess"]);
  153.         $group->setDateAccessConclusion($dateAccessConclusion);
  154.         $group->setDateAccessDays($dateAccessDays);
  155.         $group->setTypeDateSupport($typeDateSupport);
  156.         $group->setDateSupportConclusion($dateSupportConclusion);
  157.         $group->setDateSupportDays($dateSupportDays);
  158.         $group->setUserManager($data['user']);
  159.         $this->em->flush();
  160.         $data $group->toReturn();
  161.         $this->getLogService()->logUpdate("group"$group->getId(), $data);
  162.         return $data;
  163.     }
  164.     public function getGroupPaginate(
  165.         $orderParam
  166.         $status
  167.         $searchText
  168.         $limit
  169.         $offset
  170.         $filterDelete
  171.         $userManager
  172.     )
  173.     {
  174.         $filter = [];
  175.         $userClass User::class;
  176.         $order = [ "g.id" => "DESC" ];
  177.         $columns = [
  178.             "g.id",
  179.             "g.name",
  180.             "g.status",
  181.             "DATE_FORMAT(g.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  182.             "um.name AS userManager",
  183.             "um.id AS userManagerId",
  184.             "ud.name AS userDelete",
  185.         ];
  186.         $joins = [
  187.             "$userClass AS um" => ["LEFT""um.id = g.userManager"],
  188.             "$userClass AS ud" => ["LEFT""ud.id = g.userDelete"]
  189.         ];
  190.         if(!empty($order)){
  191.             $order json_decode($orderParamtrue);
  192.         }
  193.         if(!empty($userManager)){
  194.             $filter["g.userManager"] = $userManager;
  195.         }
  196.         if(!is_null($status)){
  197.             $filter["g.status"] = $status;
  198.         }
  199.         return $this->paginate(
  200.             "g",
  201.             $searchText,
  202.             $columns,
  203.             $joins,
  204.             $filter,
  205.             $order,
  206.             $limit,
  207.             $offset,
  208.             $filterDelete
  209.         );
  210.     }
  211.     public function cloneGroup(Group $group): array
  212.     {
  213.         $newGroup = clone $group;
  214.         $newGroup->setName("{$newGroup->getName()} - COPY ");
  215.         $newGroup->removeAllUser();
  216.         $this->em->persist($newGroup);
  217.         $this->em->flush();
  218.         $return $newGroup->toReturn();
  219.         $this->getLogService()->logInsert("group"$newGroup->getId(), $return);
  220.         return $return;
  221.     }
  222.     public function getGroupName(Group $group): ?string
  223.     {
  224.         return $group->getName();
  225.     }
  226.     public function addGroupUser(Group $group$user): Group
  227.     {
  228.         $group->addUser($user);
  229.         $this->getLogService()->logInsert("group_x_user"$group->getId(), $user);
  230.         return $group;
  231.     }
  232.     public function removeGroupUser($group$user$groupId$userId): void
  233.     {
  234.         $group->removeUser($user);
  235.         $this->getLogService()->logDelete("group_x_user"$groupId, [ "user" => $userId ]);
  236.         $this->em->flush();
  237.     }
  238.     public function addGroupCourses($group$courses)
  239.     {
  240.         foreach ($courses as $course) {
  241.             $group->addCourse($course);
  242.         }
  243.         $this->getLogService()->logInsert("group_x_course"$group->getId(), $courses);
  244.         $this->em->flush();
  245.     }
  246.     public function getGroupReturn($groupId)
  247.     {
  248.         $group $this->findOneBy([
  249.             "id" => $groupId,
  250.             "deleted" => GroupEnum::ITEM_NO_DELETED
  251.         ]);
  252.         return empty($group) ? false $group->toReturn();
  253.     }
  254.     public function getGroupsIdAndName(): array
  255.     {
  256.         $groups $this->findBy([
  257.             "deleted" => GroupEnum::ITEM_NO_DELETED
  258.         ]);
  259.         $data = [];
  260.         foreach ($groups as $group) {
  261.             $item = (object)[
  262.                 "id" => $group->getId(),
  263.                 "title" => $group->getName(),
  264.             ];
  265.             $data[] = $item;
  266.         }
  267.         return $data;
  268.     }
  269.     public function removeGroupCourse(Group $groupCourse $course): void
  270.     {
  271.         $group->removeCourse($course);
  272.         $this->em->flush();
  273.         $this->getLogService()->logDelete(
  274.             "group_x_course"
  275.             $group->getId(), 
  276.             ["course" => $course->getId()]
  277.         );
  278.     }
  279. }