<?php
namespace App\Repository;
use App\Entity\Company;
use App\Entity\Project;
use App\Entity\Task;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Task|null find($id, $lockMode = null, $lockVersion = null)
* @method Task|null findOneBy(array $criteria, array $orderBy = null)
* @method Task[] findAll()
* @method Task[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class TaskRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Task::class);
}
public function findAllSortByDate()
{
return $this->createQueryBuilder('t')
->orderBy('t.start_at','DESC')
->getQuery()
->getResult()
;
}
public function findAllTasksOfAProject(Project $project)
{
return $this->createQueryBuilder('t')
->andWhere('t.project = (:project)')
->setParameter('project', $project)
->getQuery()
->getResult()
;
}
public function findAllTasksOfAUser(User $user)
{
return $this->createQueryBuilder('t')
->andWhere('t.user = (:user)')
->setParameter('user', $user)
->getQuery()
->getResult()
;
}
//Select all tasks that belong to a project of the company
public function findAllTasksOfCompany(Company $company, $month, $year)
{
return $this->createQueryBuilder('t')
->andWhere('t.project in (:company)')
->setParameter('company', $company->getProjects())
->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year)
->getQuery()
->getResult()
;
}
//Select all day that belong to a project of the company
//This function is use in order to retrieve all the different day of a month where a user made some tasks
public function findAllDayOfTaskForAMonthForAUser(User $user, $month,$year)
{
return $this->createQueryBuilder('t')
->select('Day(t.start_at)')
->distinct()
->andWhere('t.user in (:user)')
->setParameter('user', $user)
->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year)
->getQuery()
->getResult()
;
}
//Select all tasks that belong of a user for a certain date , day, month, year
public function findAllTasksOfUserForADate(User $user, $day, $month, $year)
{
return $this->createQueryBuilder('t')
->andWhere('t.user in (:user)')
->setParameter('user', $user)
->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year)
->andWhere('Day(t.start_at) = :day')
->setParameter('day', $day)
->orderBy('t.start_at','DESC')
->getQuery()
->getResult()
;
}
//Select all tasks that belong of a user for a certain date month, year
public function findAllTasksOfUserForAMonth(User $user,$month, $year)
{
return $this->createQueryBuilder('t')
->andWhere('t.user in (:user)')
->setParameter('user', $user)
->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year)
->orderBy('t.start_at','DESC')
->getQuery()
->getResult()
;
}
////// ABDEL - REPORTING //// $users And $companies are array Objects/////Return List tasks from posted parameter///////
public function findAllTasksOfUsersAndCompaniesinPeriod($users,$companies, $month='', $year='',$day_start='',$day_end='')
{
$query=$this->createQueryBuilder('t')
->join('App\Entity\Project', 'p')
->where('t.project = p.id')
->andWhere('p.company IN (:companies)')
->setParameter('companies', $companies)
->andWhere('t.user IN (:users)')
->setParameter('users', $users);
if($month!='' and $year!='' and $day_start=='' and $day_end=='') {
$query->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year);
}
if($month=='' and $year=='' and $day_start!='' and $day_end!='') {
$query->andWhere('t.start_at >= :day_start')
->setParameter('day_start', $day_start)
->andWhere('t.start_at <= :day_end')
->setParameter('day_end', $day_end)
->orderBy('t.start_at', 'DESC');
}
;
return ($query->getQuery()->getResult()) ;
//Debug Query;
// SHOW SQL:
//echo $query->getSQL();
//return $query ;
}
////// ABDEL///////////////// Reporting Get list tasks in list ids tasks////////////
public function findAllTasksInListIdsTasks($idstasks=array())
{
$query=$this->createQueryBuilder('t')
->andWhere('t.id IN (:idstasks)')
->setParameter('idstasks', $idstasks)
;
return ($query->getQuery()->getResult()) ;
}
// ABDEL///////////////////
//Select all tasks that belong of a user and company for a certain date month, year
public function findAllTasksOfUserCompanyForAMonth(User $user,Company $company,$month, $year)
{
return $this->createQueryBuilder('t')
->andWhere('t.user in (:user)')
->setParameter('user', $user)
->andWhere('t.project in (:company)')
->setParameter('company', $company->getProjects())
->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year)
->orderBy('t.start_at','DESC')
->getQuery()
->getResult()
;
}
// ///// ABDEL - REPORTING //// $users And $companies are array Objects/////Return List tasks from posted parameter///////
public function findAllTasksOfUsersAndCompaniesForMonthAYear($users,$companies, $month, $year)
{
$query=$this->createQueryBuilder('t')
->join('App\Entity\Project', 'p')
->where('t.project = p.id')
->andWhere('p.company IN (:companies)')
->setParameter('companies', $companies)
->andWhere('t.user IN (:users)')
->setParameter('users', $users);
$query->andWhere('MONTH(t.start_at) = :month')
->setParameter('month', $month)
->andWhere('Year(t.start_at) = :year')
->setParameter('year', $year);
return ($query->getQuery()->getResult()) ;
//Debug Query;
// SHOW SQL:
//echo $query->getSQL();
//return $query ;
}
}