src/Controller/CronController.php line 80

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Configuration;
  4. use App\Entity\Job;
  5. use App\Entity\Reminder;
  6. use App\Entity\User;
  7. use App\Form\ConfigurationType;
  8. use App\Repository\ConfigurationRepository;
  9. use App\Repository\JobRepository;
  10. use App\Repository\ReminderRepository;
  11. use App\Repository\UserRepository;
  12. use App\Service\MailerService;
  13. use Doctrine\Common\Collections\ArrayCollection;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. /**
  20.  * @Route("/admin/cron")
  21.  */
  22. class CronController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/mailjet-webhook", name="mailjet_webhook")
  26.      */
  27.     public function mailjetwebhook(Request $request){
  28.         $file1 '/var/www/clients/client1/web12/web/var/cache/file1.txt';
  29.         $file2 '/var/www/clients/client1/web12/web/var/cache/file2.txt';
  30.         $file3 '/var/www/clients/client1/web12/web/var/cache/file3.txt';
  31.         file_put_contents($file1,json_encode($_POST));
  32.         file_put_contents($file2,json_encode($_GET));
  33.         file_put_contents($file3,$request->getContent());
  34.         return new Response('ok',200);
  35.     }
  36.     /**
  37.      * @Route("/daily-cron", name="cron_daily_user_cron", methods={"GET"})
  38.      */
  39.     public function new(TranslatorInterface $translator,Request $requestConfigurationRepository $confRepoUserRepository $userRepository,
  40.     JobRepository $jobRepositoryMailerService $mailerService,ReminderRepository $reminderRepository): Response
  41.     {
  42.             $date = new \DateTime("now");
  43.             $time = ($date->getTimestamp() % 86400);
  44.             $this->closeAllOpenedJob($jobRepository$reminderRepository);
  45.             //Minuit
  46.             if($time 86300 or $time 300){
  47.                 $userRepository->remiseAZeroCron();
  48.             }
  49.             //8:30
  50.             if($time >= 30300 and $time <= 30900){
  51.                 $this->sendMailDailyReportUser$mailerService,  $confRepo,$jobRepository,  $userRepository);
  52.             }
  53.             //9:30
  54.             if($time >= 33900 and $time <= 34500){
  55.                 $this->sendWeeklyAdmin$mailerService,  $confRepo,$jobRepository,  $userRepository);
  56.             }
  57.             $this->sendMailNonConnectedUsers$confRepo,  $jobRepository,  $reminderRepository,
  58.                                                         $userRepository,  $mailerService);
  59.             exit;
  60.     }
  61.     private function closeAllOpenedJob(JobRepository $jobRepositoryReminderRepository $reminderRepository){
  62.         $jobs =  $jobRepository->findByEnd(null);
  63.         $reminders $reminderRepository->findAll();
  64.         $rg $reminders[0];
  65.         foreach($jobs as $job){
  66.             $max $rg->getSuperior() + $rg->getdelayClosingJob() + 1;
  67.             if($job->ShouldBeClosed($max)){
  68.                 $job->setEnd($job->getCloseJobTime($rg));
  69.                 $this->getDoctrine()->getManager()->flush();
  70.             }
  71.         }
  72.     }
  73.     private function sendMailNonConnectedUsers(ConfigurationRepository $configurationRepositoryJobRepository $jobRepositoryReminderRepository $reminderRepository,
  74.                                                UserRepository $userRepositoryMailerService $mailerService){
  75.         $conf $configurationRepository->findOneById(1);
  76.         $subject $conf->getEmailCronAlertObject();
  77.         $template 'email/alert-connexion.html.twig';
  78.         $date = new \DateTime("now");
  79.         $time = ($date->getTimestamp() % 86400);
  80.         $not_concerned_users = [];
  81.         //Utilisateurs déjà connectéz
  82.         $jobs $jobRepository->getJobsbyDate($date);
  83.         foreach($jobs as $job){
  84.             if(!in_array($job->getUser()->getId(),$not_concerned_users)){
  85.                 $not_concerned_users[] = $job->getUser()->getId();
  86.             }
  87.         }
  88.         $users $userRepository->findBy(['active'=>true,'enabled'=>true,'cronAlert'=>False]);
  89.         $reminders $reminderRepository->findAll();
  90.         $rg null;
  91.         $users_reminders = [];
  92.         foreach($reminders as $r){
  93.             if($r->getId() === 1){
  94.                 $rg $r;
  95.                 continue;
  96.             }
  97.             if(!in_array($r->getUser()->getId(),$not_concerned_users)){
  98.                 $users_reminders[$r->getUser()->getId()]['reminder'] = $r;
  99.                 $users_reminders[$r->getUser()->getId()]['user'] = $r->getUser();
  100.             }
  101.         }
  102.         foreach($users as $user){
  103.             if(!in_array($user->getId(),$not_concerned_users) and !array_key_exists($user->getId(),$users_reminders)){
  104.                 $users_reminders[$user->getId()]['reminder'] = $rg;
  105.                 $users_reminders[$user->getId()]['user'] = $user;
  106.             }
  107.         }
  108.         $tab = [];
  109.         $users = [];
  110.         foreach($users_reminders as $ur){
  111.             $rem $ur['reminder'];
  112.             $u $ur['user'];
  113.             if(
  114.                 $rem->isNotInOffDay() &&
  115.                 $rem->getSendMailIfNotConnected() &&
  116.                 $rem->inTime($time)
  117.             ){
  118.                 $users[] = $u->getId();
  119.                 $tab[] = [
  120.                     'email'=>$u->getEmail(),
  121.                     'prenomNom'=>$u->getPrenomNom(),
  122.                     'content'=>[
  123.                         'content' => $conf->getEmailCronAlertMessage(),
  124.                         'host' => 'http://'.$_SERVER['HTTP_HOST'],
  125.                     ]
  126.                 ];
  127.             }
  128.         }
  129.         $mailerService->sendMultipleReceiversMultiplesMessages($subject,$template,$tab);
  130.         if($users){
  131.             $userRepository->cronAlertOk($users);
  132.         }
  133.     }
  134.     private function sendMailDailyReportUser(MailerService $mailerServiceConfigurationRepository $configurationRepository,
  135.                                          JobRepository $jobRepositoryUserRepository $userRepository){
  136.         $conf $configurationRepository->findOneById(1);
  137.         $subject $conf->getEmailCronRapportObject();
  138.         $template 'email/rapport-user.html.twig';
  139.         $reminder = new Reminder();
  140.         $jo = new Job();
  141.         $date = new \DateTime('now');
  142.         $date->modify('-1 day');
  143.         $yesterday_jobs $jobRepository->getJobsbyDate($date);
  144.         if(count($yesterday_jobs) == 0){
  145.             return null;
  146.         }
  147.         $jobs = [];
  148.         $users = [];
  149.         foreach($yesterday_jobs as $job){
  150.             if($job->getUser()->getCronRapport()){
  151.                 continue;
  152.             }
  153.             $jobs[$job->getUser()->getId()]['jobs'][] = $job;
  154.             if(!isset($jobs[$job->getUser()->getId()]['jour'])){
  155.                 $jobs[$job->getUser()->getId()]['jour'] = $reminder->getWeekDays()[$date->format('l')];
  156.                 $jobs[$job->getUser()->getId()]['date'] = $date;
  157.                 $jobs[$job->getUser()->getId()]['content'] = $conf->getEmailCronRapportMessage();
  158.                 $jobs[$job->getUser()->getId()]['host'] = 'http://'.$_SERVER['HTTP_HOST'];
  159.                 $jobs[$job->getUser()->getId()]['total'] = $job->getDuree();
  160.                 $jobs[$job->getUser()->getId()]['travail'] = 0;
  161.                 if(!$job->getBreak()){
  162.                     $jobs[$job->getUser()->getId()]['travail'] = $job->getDuree();
  163.                 }
  164.                 $users[$job->getUser()->getId()] = [
  165.                     'email' => $job->getUser()->getEmail(),
  166.                     'prenomNom' => $job->getUser()->getPrenomNom(),
  167.                 ];
  168.             }else{
  169.                 $jobs[$job->getUser()->getId()]['total'] = $jobs[$job->getUser()->getId()]['total'] + $job->getDuree();
  170.                 if(!$job->getBreak()){
  171.                     $jobs[$job->getUser()->getId()]['travail'] = $jobs[$job->getUser()->getId()]['travail'] + $job->getDuree();
  172.                 }
  173.             }
  174.         }
  175.         $content = [];
  176.         foreach ($jobs as $k => $v){
  177.             $jobs[$k]['performance'] = round(($jobs[$k]['travail']/$jobs[$k]['total'])*100).'%';
  178.             $jobs[$k]['total'] = $jo->getDisplayedDuree($jobs[$k]['total']);
  179.             $content[$k]['email'] = $users[$k]['email'];
  180.             $content[$k]['prenomNom'] = $users[$k]['prenomNom'];
  181.             $content[$k]['content'] = $jobs[$k];
  182.         }
  183.         $mailerService->sendMultipleReceiversMultiplesMessages($subject,$template,$content);
  184.         if($users){
  185.             $userRepository->cronRapportOk(array_keys($users));
  186.         }
  187.     }
  188.     private function sendWeeklyAdmin(MailerService $mailerServiceConfigurationRepository $configurationRepository,
  189.                                          JobRepository $jobRepositoryUserRepository $userRepository){
  190.         $conf $configurationRepository->findOneById(1);
  191.         $subject $conf->getEmailCronAdminObject();
  192.         $template 'email/rapport-admin.html.twig';
  193.         $jo = new Job();
  194.         $date = new \DateTime('now');
  195.         if($date->format('l') != 'Monday'){
  196.             return null;
  197.         }
  198.         $week_jobs $jobRepository->getWeekJobs($date);
  199.         if(count($week_jobs) == 0){
  200.             return null;
  201.         }
  202.         $projectTimes = [];
  203.         $project_to_views = new ArrayCollection();
  204.         $userTimes = [];
  205.         foreach($week_jobs as $job){
  206.             if(!$job->getBreak()){
  207.                 $project $job->getTask()->getProject();
  208.                 if(!is_null($project) && $project_to_views->contains($project) === False){
  209.                     $project_to_views->add($project);
  210.                 }
  211.                 if(!is_null($project) && !isset($projectTimes[$project->getId()])){
  212.                     $projectTimes[$project->getId()] = $job->getDuree();
  213.                 }elseif(!is_null($project) &&  isset($projectTimes[$project->getId()])){
  214.                     $projectTimes[$project->getId()] = $projectTimes[$project->getId()] + $job->getDuree();
  215.                 }
  216.             }
  217.             if(!isset($userTimes[$job->getUser()->getId()])){
  218.                 $userTimes[$job->getUser()->getId()]['workedHours'] = $job->getDuree();
  219.                 if(!$job->getBreak()){
  220.                     $userTimes[$job->getUser()->getId()]['reallyworkedHours'] = $job->getDuree();
  221.                 }
  222.             }else{
  223.                 $userTimes[$job->getUser()->getId()]['workedHours'] = $userTimes[$job->getUser()->getId()]['workedHours'] + $job->getDuree();
  224.                 if(!$job->getBreak()){
  225.                     $userTimes[$job->getUser()->getId()]['reallyworkedHours'] = $userTimes[$job->getUser()->getId()]['reallyworkedHours'] + $job->getDuree();
  226.                 }
  227.             }
  228.         }
  229.         foreach($projectTimes as $k => $v){
  230.             $projectTimes[$k] = $jo->getDisplayedDuree($projectTimes[$k]);
  231.         }
  232.         $users $userRepository->findBy(['active'=>true]);
  233.         foreach($users as $user){
  234.             if(isset($userTimes[$user->getId()])){
  235.                 $userTimes[$user->getId()]['performance'] = round(($userTimes[$user->getId()]['reallyworkedHours']/$userTimes[$user->getId()]['workedHours'])*100).'%';
  236.                 $userTimes[$user->getId()]['workedHours'] = $jo->getDisplayedDuree($userTimes[$user->getId()]['workedHours']);
  237.                 $userTimes[$user->getId()]['reallyworkedHours'] = $jo->getDisplayedDuree($userTimes[$user->getId()]['reallyworkedHours']);
  238.             }else{
  239.                 $userTimes[$user->getId()]['workedHours'] = '0';
  240.                 $userTimes[$user->getId()]['reallyworkedHours'] = '0';
  241.                 $userTimes[$user->getId()]['performance'] = '0%';
  242.             }
  243.         }
  244.         $dateDebut = new \DateTime('now');
  245.         $dateFin = new \DateTime('now');
  246.         $dateFin->modify("-1 day");
  247.         $dateDebut->modify("-7 days");
  248.         $contenu = [
  249.             'date' => $dateDebut,
  250.             'dateFin' => $dateFin,
  251.             'content' => $conf->getEmailCronAdminMessage(),
  252.             'host' => 'http://'.$_SERVER['HTTP_HOST'],
  253.             'projects' => $project_to_views,
  254.             'projectTimes' => $projectTimes,
  255.             'users' => $users,
  256.             'userTimes' => $userTimes,
  257.         ];
  258.         $admins = new ArrayCollection();
  259.         foreach($users as $user){
  260.             if($user->isAdmin() && !$user->getCronAdmin()){
  261.                 $admins->add($user);
  262.             }
  263.         }
  264.         foreach ($admins as $user){
  265.             $content[$user->getId()]['email'] = $user->getEmail();
  266.             $content[$user->getId()]['prenomNom'] = $user->getPrenomNom();
  267.             $content[$user->getId()]['content'] = $contenu;
  268.         }
  269.         $mailerService->sendMultipleReceiversMultiplesMessages($subject,$template,$content);
  270.         $userRepository->cronAdmintOk(array_keys($content));
  271.     }
  272. }