src/Service/ServiceTeaminfo.php line 2135

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\User;
  4. use App\Entity\Entreprise;
  5. use App\Entity\ProjectFacturation;
  6. use App\Entity\Site;
  7. use App\Entity\Tikets;
  8. use App\Entity\ProjectFrais;
  9. use App\Entity\TicketReseaux;
  10. use App\Entity\Interventions;
  11. use App\Entity\Projects;
  12. use App\Entity\ProjectUsers;
  13. use App\Entity\ProjectEquipe;
  14. use App\Entity\Equipes;
  15. use App\Entity\Notifications;
  16. use App\Entity\InterventionsMateriel;
  17. use App\Entity\InterventionAffectedTags;
  18. use App\Entity\InterventionImages;
  19. use App\Entity\InterventionAffectedUsers;
  20. use App\Entity\InterventionAffectedEquipes;
  21. use App\Entity\ProjectSuiviTravaux;
  22. use App\Entity\ProjectAffectedDays;
  23. use App\Entity\ProjectsAutoPlanifiedTasks;
  24. use App\Repository\SiteRepository;
  25. use App\Repository\InterventionsRepository;
  26. use App\Repository\ProjectsRepository;
  27. use Doctrine\ORM\EntityManagerInterface;
  28. use Symfony\Component\DependencyInjection\ContainerInterface;
  29. use Twig\Environment;
  30. use Symfony\Component\HttpFoundation\RequestStack;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\HttpFoundation\Cookie;
  33. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  34. use Symfony\Component\HttpFoundation\Session\Session;
  35. use Symfony\Component\Validator\Constraints\DateTime;
  36. use Symfony\Component\Routing\RouterInterface;
  37. use \Ovh\Api;
  38. class ServiceTeaminfo
  39. {
  40.     private $SiteRepository;
  41.     private $em;
  42.     private $container;
  43.     private $twig;
  44.     protected $requestStack;
  45.     private $tokenStorage;
  46.     private $InterventionsRepository;
  47.     private $ProjectsRepository;
  48.     public $currentView;
  49.     public $currentProjectVue;
  50.     public $currentTicketVue;
  51.     public $currentCongesVue;
  52.     public $currentProjectYearVue;
  53.     public const DEFAULT_LIMIT 50;
  54.     public const DEFAULT_LIMIT_PROJECTS 50;
  55.     public const INTERVENTION_FILTER "intervention_filter";
  56.     public const TICKET_FILTER "ticket_filter";
  57.     public const PROJECT_FILTER "project_filter";
  58.     public const PROJECT_PLANIFICATEUR_FILTER "project_planificateur_filter";
  59.     public const PROJECT_INTERVENANT_FILTER "project_intervenant_filter";
  60.     public const CONGE_FILTER "conge_filter";
  61.     public $widthsAndDefaultView;
  62.     public $projectVue;
  63.     public $ticketVue;
  64.     public $days;
  65.     public $image_extensions;
  66.     public const COLORS = array('#EC083C''#DA3C78''#7E349D''#0077C0''#07ABA0''#F1892D''#39F3E5''#FA51E9''#08D333''#F59C66'"#FF69B4""#FF0000""#FFA500""#FFFF00""#808000""#800000""#008000""#800080""#FF00FF""#00FF00""#008080""#00FFFF""#0000FF""#000080""#808080""#CD5C5C""#FFEBCD""#BC8F8F""#D2691E");
  67.     public const DARK_COLORS = array("#C71585""#8B0000""#FF4500""#BDB76B""#006400""#008080""#191970""#800000""#6495ED""#000000""#BC8F8F""#FFD700""#696969""#4682B4""#3CB371""#FFF804""#DC143C""#E9967A""#FF00FF""#FF1493");
  68.     public const MORNING_START "08:00";
  69.     public const MORNING_END "13:00";
  70.     public const MIDDAY_START "14:00";
  71.     public const MIDDAY_END "18:00";
  72.     public const MONTHS = array(
  73.         '1' => array('key' => 'Jan''libelle' => 'Janvier'),
  74.         '2' => array('key' => 'Feb''libelle' => 'Février'),
  75.         '3' => array('key' => 'Mar''libelle' => 'Mars'),
  76.         '4' => array('key' => 'Apr''libelle' => 'Avril'),
  77.         '5' => array('key' => 'May''libelle' => 'Mai'),
  78.         '6' => array('key' => 'Jun''libelle' => 'Juin'),
  79.         '7' => array('key' => 'Jul''libelle' => 'Juillet'),
  80.         '8' => array('key' => 'Aug''libelle' => 'Aout'),
  81.         '9' => array('key' => 'Sep''libelle' => 'Septembre'),
  82.         '10' => array('key' => 'Oct''libelle' => 'Octobre'),
  83.         '11' => array('key' => 'Nov''libelle' => 'Novembre'),
  84.         '12' => array('key' => 'Dec''libelle' => 'Décembre')
  85.     );
  86.     private $router;
  87.     public function __construct(?RouterInterface $router, ?SiteRepository $SiteRepository, ?EntityManagerInterface $em, ?ContainerInterface $container, ?Environment $twig, ?RequestStack $requestStack, ?TokenStorageInterface $tokenStorage, ?InterventionsRepository $InterventionsRepository, ?ProjectsRepository $ProjectsRepository)
  88.     {
  89.         $this->SiteRepository $SiteRepository;
  90.         $this->InterventionsRepository $InterventionsRepository;
  91.         $this->ProjectsRepository $ProjectsRepository;
  92.         $this->em $em;
  93.         $this->container $container;
  94.         $this->twig $twig;
  95.         $this->requestStack $requestStack;
  96.         $this->tokenStorage $tokenStorage;
  97.         $this->router $router;
  98.         $this->image_extensions explode(","$container->getParameter('extension_accepte'));
  99.         $this->widthsAndDefaultView = array(
  100.             "etat" => array("width" => "60""default" => 1"libelle" => 'Etat'),
  101.             "client" => array("width" => "150""default" => 1"libelle" => 'Client'),
  102.             "type" => array("width" => "150""default" => 1"libelle" => 'Type intervention'),
  103.             "description" => array("width" => "250""default" => 1"libelle" => 'Description'),
  104.             "date" => array("width" => "90""default" => 1"libelle" => 'Date'),
  105.             "heure_debut" => array("width" => "135""default" => 1"libelle" => 'Heure de début'),
  106.             "facturation" => array("width" => "160""default" => 1"libelle" => 'Facturation'),
  107.             "technicien" => array("width" => "150""default" => 1"libelle" => 'Technicien'),
  108.             "adresse" => array("width" => "210""default" => 0"libelle" => 'Adresse de l\' intervention'),
  109.             "tags" => array("width" => "300""default" => 0"libelle" => 'Tags'),
  110.             "duree" => array("width" => "90""default" => 0"libelle" => 'Durée'),
  111.             "nb_documents" => array("width" => "171""default" => 0"libelle" => 'Nombre de document'),
  112.             "tickets_reseaux" => array("width" => "160""default" => 0"libelle" => 'Ticket réseau'),
  113.             "site" => array("width" => "180""default" => 0"libelle" => 'Site'),
  114.             "interlocutor" => array("width" => "150""default" => 0"libelle" => 'Référant'),
  115.         );
  116.         $this->projectVue = array(
  117.             "libelle" => array("width" => "300""default" => 1"libelle" => 'Libelle'),
  118.             "date_debut" => array("width" => "90""default" => 1"libelle" => 'Date de début'),
  119.             "date_fin" => array("width" => "90""default" => 1"libelle" => 'Date de fin'),
  120.             "etat" => array("width" => "120""default" => 1"libelle" => 'Etat'),
  121.             "client" => array("width" => "150""default" => 0"libelle" => 'Client'),
  122.             "nb_heures_estimer" => array("width" => "90""default" => 0"libelle" => 'Nombre d\'heures estimé'),
  123.             "nb_heure_planifier" => array("width" => "90""default" => 0"libelle" => 'Nombre d\'heures plannifiées'),
  124.             "avancement" => array("width" => "110""default" => 0"libelle" => 'Avancement'),
  125.             "planificateurs" => array("width" => "150""default" => 0"libelle" => 'Planificateurs'),
  126.             "intervenants" => array("width" => "200""default" => 0"libelle" => 'Intervenants'),
  127.             "materiels" => array("width" => "150""default" => 0"libelle" => 'Matériels'),
  128.             "interlocutor" => array("width" => "150""default" => 0"libelle" => 'Référant'),
  129.         );
  130.         $this->ticketVue = array(
  131.             "client_ticket" => array("width" => "150""default" => 1"libelle" => 'Client'),
  132.             "date" => array("width" => "90""default" => 1"libelle" => 'Date'),
  133.             "statut" => array("width" => "90""default" => 1"libelle" => 'Statut'),
  134.             "description" => array("width" => "250""default" => 1"libelle" => 'Description'),
  135.             "criticite" => array("width" => "90""default" => 1"libelle" => 'Criticité'),
  136.             "site" => array("width" => "150""default" => 1"libelle" => 'Site'),
  137.             "type_ticket" => array("width" => "150""default" => 0"libelle" => 'Type de ticket'),
  138.             "tags" => array("width" => "150""default" => 0"libelle" => 'Tags'),
  139.             "saisie_par" => array("width" => "150""default" => 0"libelle" => 'Saisie par'),
  140.             "ticket_affecte_a" => array("width" => "150""default" => 0"libelle" => 'Ticket affecte a'),
  141.             "ticket_supervise_par" => array("width" => "150""default" => 0"libelle" => 'Ticket supervisé par'),
  142.             "date_prev_real" => array("width" => "150""default" => 0"libelle" => 'Date prévisionnelle de réalisation'),
  143.             "date_ech" => array("width" => "150""default" => 0"libelle" => 'Date d\'échéance'),
  144.         );
  145.         $this->projectVueUserClient = array(
  146.             "id" => 0,
  147.             "libelle" => 1,
  148.             "date_debut" => 1,
  149.             "date_fin" => 1,
  150.             "etat" => 0,
  151.             "client" => 0,
  152.             "nb_heures_estimer" => 1,
  153.             "nb_heure_planifier" => 0,
  154.             "avancement" => 0,
  155.             "planificateurs" => 0,
  156.             "intervenants" => 0,
  157.             "materiels" => 0,
  158.             "interlocutor" => 0,
  159.         );
  160.         $this->projectYearVue = array(
  161.             "intervenant" => array("default" => 1"libelle" => 'Intervenant'),
  162.             "project" => array("default" => 0"libelle" => 'Projets'),
  163.             "client" => array("default" => 0"libelle" => 'Clients'),
  164.             "devis" => array("default" => 0"libelle" => 'Devis'),
  165.             "manager" => array("default" => 0"libelle" => 'Maîtrise d\'oeuvre'),
  166.             "fournisseur" => array("default" => 0"libelle" => 'Fournisseurs'),
  167.             "lot" => array("default" => 0"libelle" => 'Lots'),
  168.             "agrement" => array("default" => 0"libelle" => 'Contrat d\'agrément '),
  169.             "sous-traitant" => array("default" => 0"libelle" => 'Sous-traitant'),
  170.             "fusion_intervenant" => array("default" => 0"libelle" => 'Fusion des intervenants'),
  171.         );
  172.         $this->days = array(
  173.             'lundi' => 'Lundi',
  174.             'mardi' => 'Mardi',
  175.             'mercredi' => 'Mercredi',
  176.             'jeudi' => 'Jeudi',
  177.             'vendredi' => 'Vendredi',
  178.             'samedi' => 'Samedi',
  179.             'dimanche' => 'Dimanche'
  180.         );
  181.         if ($this->requestStack) {
  182.             if ($this->requestStack->getCurrentRequest()) {
  183.                 $cookies $this->requestStack->getCurrentRequest()->cookies;
  184.                 if ($cookies->has('current_intervention_vue')) {
  185.                     $current_vue unserialize($cookies->get('current_intervention_vue'));
  186.                     if ($current_vue)
  187.                         $this->currentView array_keys($current_vue"1");
  188.                 }
  189.                 if ($cookies->has('current_project_vue')) {
  190.                     $current_project_vue unserialize($cookies->get('current_project_vue'));
  191.                     if ($current_project_vue)
  192.                         $this->currentProjectVue array_keys($current_project_vue"1");
  193.                 }
  194.                 if ($cookies->has('current_ticket_vue')) {
  195.                     $current_ticket_vue unserialize($cookies->get('current_ticket_vue'));
  196.                     if ($current_ticket_vue)
  197.                         $this->currentTicketVue array_keys($current_ticket_vue"1");
  198.                 }
  199.                 if ($cookies->has('current_project_year_vue')) {
  200.                     $current_project_year_vue = (array) json_decode($cookies->get('current_project_year_vue'));
  201.                     if ($current_project_year_vue)
  202.                         $this->currentProjectYearVue array_keys($current_project_year_vue"1");
  203.                 }
  204.             }
  205.         }
  206.     }
  207.     public function GetSites()
  208.     {
  209.         $ids_sites 0;
  210.         $request $this->requestStack->getCurrentRequest();
  211.         $cookies $request->cookies;
  212.         $sites $cookies->get('site');
  213.         if ($sites)
  214.             $ids_sites explode(','$sites);
  215.         return $ids_sites;
  216.     }
  217.     public function IsJournalProjet()
  218.     {
  219.         $entreprise $this->em->getRepository('App\Entity\Entreprise')->find($this->container->getParameter('entreprise_id'));
  220.         return $entreprise->getIsJournalProjet();
  221.     }
  222.     public function generatePdf($content$Dossier$nom)
  223.     {
  224.         $request $this->requestStack->getCurrentRequest();
  225.         $base_path $request->server->get('DOCUMENT_ROOT') . $request->getBasePath();
  226.         $base_url $request->getSchemeAndHttpHost() . $request->getBasePath();
  227.         $server_path "/" $Dossier "/" date("Y") . '/';
  228.         if (!file_exists($base_path $server_path))
  229.             mkdir($base_path $server_path0777);
  230.         $server_path .= date("m") . '/';
  231.         if (!file_exists($base_path $server_path))
  232.             mkdir($base_path $server_path0777);
  233.         $server_path .= date("d") . '/';
  234.         if (!file_exists($base_path $server_path))
  235.             mkdir($base_path $server_path0777);
  236.         $file_name $nom uniqid() . ".pdf";
  237.         $url $base_url $server_path $file_name;
  238.         $pdf_file $this->generate_pdf($content, array(), $file_name$base_path $server_path);
  239.         return $url;
  240.     }
  241.     public function formatPrice($prix$currency true)
  242.     {
  243.         $price_format number_format($prix2","" ");
  244.         if ($currency == true)
  245.             $price_format .= " €";
  246.         return $price_format;
  247.     }
  248.     function set_user_duree($User)
  249.     {
  250.         $count_jour $this->InterventionsRepository->DureeInterventionByUser($User->getId(), true);
  251.         $Duree $this->InterventionsRepository->DureeInterventionByUser($User->getId());
  252.         if ($count_jour)
  253.             $User->setTotalInterventionsJours($count_jour);
  254.         else
  255.             $User->setTotalInterventionsJours(0);
  256.         if ($Duree)
  257.             $User->setTotalInterventionsReel($Duree);
  258.         else
  259.             $User->setTotalInterventionsReel(0);
  260.         $this->em->persist($User);
  261.         $this->em->flush();
  262.     }
  263.     public function listeSites()
  264.     {
  265.         $entreprise_id $this->container->getParameter('entreprise_id');
  266.         $sites $this->em->getRepository(Site::class)->findBy(['entreprise' => $entreprise_id'deleted' => null]);
  267.         $entreprise $this->em->getRepository(Entreprise::class)->find($entreprise_id);
  268.         $id_client_interne $entreprise->getCompteInterne()->getId();
  269.         $user_connected $this->tokenStorage->getToken()->getUser();
  270.         $current_site_id $user_connected->getSiteRatachement()->getId();
  271.         $request $this->requestStack->getCurrentRequest();
  272.         $cookies $request->cookies;
  273.         $sites_ids = array();
  274.         if (!$cookies->has('site')) {
  275.             $response = new Response();
  276.             $cookie = new Cookie('site'$current_site_idtime() + (365 24 60 60), '/'nullfalsefalse);
  277.             $response->headers->setCookie($cookie);
  278.             $response->sendHeaders();
  279.             array_push($sites_ids$current_site_id);
  280.         } else {
  281.             $sites_ids $this->GetSites();
  282.         }
  283.         $has_atelier 0;
  284.         foreach ($sites as $site) {
  285.             if (in_array($site->getId(), $sites_ids)) {
  286.                 if ($site->getHasAtelier() != 0)
  287.                     $has_atelier 1;
  288.             }
  289.         }
  290.         $html $this->twig->render('sites/select_site.html.twig', [
  291.             'sites' => $sites,
  292.             'sites_ids' => $sites_ids,
  293.             'current_site_id' => $current_site_id,
  294.             'current_site_atelier' => $has_atelier,
  295.             'id_client_interne' => $id_client_interne
  296.         ]);
  297.         return $html;
  298.     }
  299.     public function FormattedDuration($duree_minute$displayDays true)
  300.     {
  301.         if ($duree_minute && $duree_minute !== "" && $duree_minute != 0) {
  302.             $nb_heure 0;
  303.             $jours 0;
  304.             $signe_negative "";
  305.             if ($duree_minute 0) {
  306.                 $duree_minute = -$duree_minute;
  307.                 $signe_negative "-";
  308.             }
  309.             if ($duree_minute >= 60) {
  310.                 $nb_heure = (int) ($duree_minute 60);
  311.                 $duree_minute $duree_minute 60;
  312.             }
  313.             if ($displayDays) {
  314.                 $jours = (int) ($nb_heure 24);
  315.                 $nb_heure $nb_heure 24;
  316.             }
  317.             if ($nb_heure == 0)
  318.                 $nb_heure '00';
  319.             if ($nb_heure 10 && $nb_heure 0)
  320.                 $nb_heure '0' strval($nb_heure);
  321.             $duree_minute round($duree_minute0);
  322.             if ($duree_minute 10)
  323.                 $duree_minute '0' strval($duree_minute);
  324.             if ($displayDays && $jours 0)
  325.                 return $signe_negative ' ' $jours ' j ' $nb_heure ' h ' $duree_minute ' min';
  326.             else
  327.                 return $signe_negative ' ' $nb_heure ' h ' $duree_minute ' min';
  328.         }
  329.         return '00:00';
  330.     }
  331.     public function get_indicateurs()
  332.     {
  333.         $request $this->requestStack->getCurrentRequest();
  334.         $cookies $request->cookies;
  335.         if ($cookies->has('indicateurs')) {
  336.             $data unserialize($cookies->get('indicateurs'), ["allowed_classes" => false]);
  337.         } else {
  338.             $user $this->tokenStorage->getToken()->getUser();
  339.             $nb_interventions_non_facture 0;
  340.             $nb_interventions_a_venir 0;
  341.             $nb_expired_licence 0;
  342.             $nb_ticket_reseau 0;
  343.             $nb_mes_ticket_reseau 0;
  344.             $nb_tickets 0;
  345.             if ($user != "anon.") {
  346.                 $id $user->getID();
  347.                 if (array_search("ROLE_admin"$user->getRoles()) !== false) {
  348.                     $nb_interventions_non_facture $this->getNbInterventionsNonFacture();
  349.                     $nb_mes_interventions_non_facture $this->getNbInterventionsNonFacture($id);
  350.                     $nb_ticket_reseau $this->getNbTicketsReseau();
  351.                     $nb_mes_ticket_reseau $this->getNbTicketsReseau($id);
  352.                     $nb_interventions_a_venir $this->getNbInterventionsAVenir();
  353.                     $nb_mes_interventions_a_venir $this->getNbInterventionsAVenir($id);
  354.                     $nb_expired_licence $this->getNbExpiredLicence();
  355.                     $resultNbTickets $this->getNbticketNonTermineEtBloque();
  356.                     $resultNbTickets_atelier $this->getNbticketAtelierNonTermineEtBloque();
  357.                 } else {
  358.                     $nb_mes_interventions_non_facture $this->getNbInterventionsNonFacture($id);
  359.                     $nb_mes_ticket_reseau $this->getNbTicketsReseau($id);
  360.                     $nb_mes_interventions_a_venir $this->getNbInterventionsAVenir($id);
  361.                     $nb_expired_licence $this->getNbExpiredLicence($id);
  362.                     $resultNbTickets $this->getNbticketNonTermineEtBloque($id);
  363.                     $resultNbTickets_atelier $this->getNbticketAtelierNonTermineEtBloque($id);
  364.                 }
  365.             }
  366.             $nb_tickets $nb_ticket_reseau $resultNbTickets['nb_tickets_non_termine'];
  367.             $data = array(
  368.                 'nb_interventions_non_facture' => $nb_interventions_non_facture,
  369.                 'nb_mes_interventions_non_facture' => $nb_mes_interventions_non_facture,
  370.                 'nb_interventions_a_venir' => $nb_interventions_a_venir,
  371.                 'nb_mes_interventions_a_venir' => $nb_mes_interventions_a_venir,
  372.                 'nb_expired_licence' => $nb_expired_licence,
  373.                 'nb_tickets_non_termine' => $resultNbTickets_atelier['nb_tickets_non_termine'],
  374.                 'nb_tickets_bloque' => $resultNbTickets_atelier['nb_tickets_bloque'],
  375.                 'nb_mes_ticket_reseau' => $nb_mes_ticket_reseau,
  376.                 'nb_ticket_reseau' => $nb_ticket_reseau,
  377.                 'nb_tickets' => $nb_tickets
  378.             );
  379.             $response = new Response();
  380.             $cookie = new Cookie('indicateurs'serialize($data), time() + (365 24 60 60), '/'nullfalsefalse);
  381.             $response->headers->setCookie($cookie);
  382.             $response->sendHeaders();
  383.         }
  384.         $html $this->twig->render('user_indicateurs.html.twig'$data);
  385.         if ($request->get("is_ajax_call"))
  386.             return new Response($html);
  387.         return $html;
  388.     }
  389.     public function getNbInterventionsNonFacture($id null)
  390.     {
  391.         $sql "
  392.             SELECT count(distinct(i.id)) as nb_interventions 
  393.             FROM interventions as i
  394.             INNER JOIN intervention_affected_users as u ON  i.id = u.intervention_id
  395.             WHERE i.facture= 'a_facturer' AND i.deleted is null    
  396.         ";
  397.         if ($id)
  398.             $sql .= " AND u.user_id = '" addslashes($id) . "'";
  399.         $request $this->em->getConnection()->prepare($sql);
  400.         $request->execute();
  401.         $result $request->fetchAll();
  402.         return $result[0]["nb_interventions"];
  403.     }
  404.     public function getNbTicketsReseau($id null)
  405.     {
  406.         $sql "
  407.             SELECT count(*) as nb_ticket_reseau 
  408.             FROM ticket_reseaux 
  409.             WHERE statut BETWEEN 2 and 3
  410.             and deleted IS NULL
  411.             and archived IS NULL
  412.         ";
  413.         if ($id)
  414.             $sql .= "  AND user_ticket_affected_id='" addslashes($id) . "'";
  415.         $request $this->em->getConnection()->prepare($sql);
  416.         $request->execute();
  417.         $result $request->fetchAll();
  418.         return $result[0]["nb_ticket_reseau"];
  419.     }
  420.     public function getNbInterventionsAVenir($id null)
  421.     {
  422.         $now strtotime(date("Y-m-d H:i:s"));
  423.         $date_60 date("Y-m-d H:i:s"strtotime('+ 60 day'$now));
  424.         $sql "
  425.             SELECT count(distinct(i.id)) as interventions_a_venir 
  426.             FROM `interventions` as i 
  427.         ";
  428.         if ($id) {
  429.             $sql .= "
  430.                 INNER JOIN intervention_affected_users as u ON  i.id = u.intervention_id             
  431.                 WHERE i.date > '" addslashes($now) . "' AND i.deleted is null AND u.user_id = '" addslashes($id) . "'
  432.             ";
  433.         } else {
  434.             $sql .= " WHERE i.date > '" addslashes($now) . "' AND i.deleted is null";
  435.         }
  436.         $request $this->em->getConnection()->prepare($sql);
  437.         $request->execute();
  438.         $result $request->fetchAll();
  439.         return $result[0]["interventions_a_venir"];
  440.     }
  441.     public function getNbExpiredLicence($id null)
  442.     {
  443.         $now strtotime(date("Y-m-d H:i:s"));
  444.         $date_60 date("Y-m-d H:i:s"strtotime('+ 60 day'$now));
  445.         $sql '
  446.             SELECT count(*) as expired_licence
  447.             FROM `assignedlicence` 
  448.             WHERE date < "' addslashes($date_60) . '" and archived IS NULL  and deleted IS NULL    
  449.         ';
  450.         if ($id)
  451.             $sql .= ' AND user_id = "' addslashes($id) . '"';
  452.         $request $this->em->getConnection()->prepare($sql);
  453.         $request->execute();
  454.         $result $request->fetchAll();
  455.         return $result[0]["expired_licence"];
  456.     }
  457.     public function getNbticketNonTermineEtBloque($id null)
  458.     {
  459.         $nb_tickets_non_termine 0;
  460.         $nb_tickets_bloque 0;
  461.         $conditions = array(
  462.             'archived' => null,
  463.             'deleted' => null,
  464.             'statut' => 5
  465.         );
  466.         if ($id)
  467.             $conditions['user_ticket_affected'] = $id;
  468.         $tickets $this->em->getRepository(TicketReseaux::class)->findBy($conditions);
  469.         foreach ($tickets as $ticket) {
  470.             $duree $ticket->getDuree();
  471.             $nb_tickets_non_termine++;
  472.             if ($duree == 1)
  473.                 $nb_tickets_bloque++;
  474.         }
  475.         return array(
  476.             'nb_tickets_non_termine' => $nb_tickets_non_termine,
  477.             'nb_tickets_bloque' => $nb_tickets_bloque
  478.         );
  479.     }
  480.     public function getNbticketAtelierNonTermineEtBloque($id null)
  481.     {
  482.         $nb_tickets_non_termine 0;
  483.         $nb_tickets_bloque 0;
  484.         $conditions = array(
  485.             'archived' => null,
  486.             'deleted' => null,
  487.             'etat' => array(123)
  488.         );
  489.         if ($id)
  490.             $conditions['user'] = $id;
  491.         $tickets $this->em->getRepository(Tikets::class)->findBy($conditions);
  492.         foreach ($tickets as $ticket) {
  493.             $duree $ticket->getEtat();
  494.             $site $ticket->getSite()->getId();
  495.             $nb_tickets_non_termine++;
  496.             if ($duree == and $site == 2)
  497.                 $nb_tickets_bloque++;
  498.         }
  499.         return array(
  500.             'nb_tickets_non_termine' => $nb_tickets_non_termine,
  501.             'nb_tickets_bloque' => $nb_tickets_bloque
  502.         );
  503.     }
  504.     public function getNumber($string)
  505.     {
  506.         $number preg_replace("/[^0-9.]/"""$string);
  507.         return $number;
  508.     }
  509.     public function sendSms($telephone$msg)
  510.     {
  511.         //format numero de tel
  512.         $telephone str_replace(" """$telephone);
  513.         if (strlen($telephone) == 10)
  514.             $telephone substr($telephone19);
  515.         $telephone "+33" $telephone;
  516.         /******SMS****/
  517.         $endpoint $this->container->getParameter('ovh_sms_endpoint');
  518.         $applicationKey $this->container->getParameter('ovh_sms_applicationKey');
  519.         $applicationSecret $this->container->getParameter('ovh_sms_applicationSecret');
  520.         $consumer_key $this->container->getParameter('ovh_sms_consumer_key');
  521.         $fixedMessage substr($msg0140);
  522.         try {
  523.             $conn = new Api($applicationKey$applicationSecret$endpoint$consumer_key);
  524.             $smsServices $conn->get('/sms/');
  525.             $content = (object) array(
  526.                 "charset" => "UTF-8",
  527.                 "class" => "phoneDisplay",
  528.                 "coding" => "7bit",
  529.                 "message" => $fixedMessage,
  530.                 "noStopClause" => false,
  531.                 "priority" => "high",
  532.                 "receivers" => [$telephone],
  533.                 "senderForResponse" => true,
  534.                 "validityPeriod" => 2880
  535.             );
  536.             $resultPostJob $conn->post('/sms/' $smsServices[0] . '/jobs'$content);
  537.             $result $conn->get('/sms/' $smsServices[0] . '/jobs');
  538.             if (count($resultPostJob["validReceivers"]) < 1) {
  539.                 $return_msg "SMS non envoyé : Format incorrect ou numéro non activé.";
  540.             } else {
  541.                 $return_msg "valide";
  542.             }
  543.         } catch (\Exception $e) {
  544.             $return_msg $e->getMessage();
  545.         }
  546.         return $return_msg;
  547.     }
  548.     public function get_extension_file($path)
  549.     {
  550.         $ext pathinfo($pathPATHINFO_EXTENSION);
  551.         if ($ext == "jpg")
  552.             $ext "jpeg";
  553.         return $ext;
  554.     }
  555.     public function get_name_file($path)
  556.     {
  557.         return pathinfo($pathPATHINFO_FILENAME);
  558.     }
  559.     public function decode_img_base64($img$ext null)
  560.     {
  561.         return base64_decode(preg_replace('#^data:image/\w+;base64,#i'''$img));
  562.     }
  563.     public function decode_PDF_base64($img)
  564.     {
  565.         $img str_replace('data:application/pdf;base64,'''$img);
  566.         $img str_replace(' ''+'$img);
  567.         return base64_decode($img);
  568.     }
  569.     function get_mb($size)
  570.     {
  571.         return sprintf("%4.2f"$size 1048576);
  572.     }
  573.     function generateSlug($text)
  574.     {
  575.         $text preg_replace('~[^\pL\d]+~u''-'$text);
  576.         $text iconv('utf-8''us-ascii//TRANSLIT'$text);
  577.         $text preg_replace('~[^-\w]+~'''$text);
  578.         $text trim($text'-');
  579.         $text strtolower($text);
  580.         if (empty($text)) {
  581.             return 'n-a';
  582.         }
  583.         return $text;
  584.     }
  585.     public function upload_image($image_data null$file null$use_file_extenstion false$update_file false$frais_projet null$extension null$projet_id null)
  586.     {
  587.         $image_ext explode(","$this->container->getParameter('extension_accepte'));
  588.         $request $this->requestStack->getCurrentRequest();
  589.         $host "https://" $request->server->get('HTTP_HOST');
  590.         $base = (!empty($request->server->get('BASE'))) ? $request->server->get('BASE') : '';
  591.         $base_url $host $base;
  592.         $server_path $request->server->get('DOCUMENT_ROOT') . $request->getBasePath();
  593.         if ($extension == null)
  594.             $extension "png";
  595.         $originalFileName "";
  596.         if ($file and $update_file == false) {
  597.             $extension pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
  598.         }
  599.         if ($update_file == true)
  600.             $extension $this->get_extension_file($file->getClientOriginalName());
  601.         if (in_array(strtoupper($extension), $image_ext) || $use_file_extenstion || $update_file) {
  602.             $location $server_path "/uploads/" date("Y") . '/';
  603.             if (!file_exists($location))
  604.                 mkdir($location0777);
  605.             $location .= date("m") . '/';
  606.             if (!file_exists($location))
  607.                 mkdir($location0777);
  608.             $location .= date("d") . '/';
  609.             if (!file_exists($location))
  610.                 mkdir($location0777);
  611.             $slug $image_data uniqid() . $extension $this->generateSlug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME));
  612.             $num 0;
  613.             $filename $slug '.' $extension;
  614.             while (file_exists($location '/' $filename)) {
  615.                 $num++;
  616.                 $filename $slug '-' $num '.' $extension;
  617.             }
  618.             if ($file) {
  619.                 $file->move($location$filename);
  620.                 $originalFileName $file->getClientOriginalName();
  621.             }
  622.             $location .= $filename;
  623.             if ($image_data)
  624.                 file_put_contents($location$image_data);
  625.             $location str_replace($server_path$base_url$location);
  626.             $path "/uploads/" date("Y") . '/' date("m") . '/' date("d") . '/' $filename;
  627.             if (!$request->hasSession())
  628.                 $request->setSession(new Session());
  629.             if ($frais_projet[0] == true and $frais_projet[1] == false) {
  630.                 if ($originalFileName == "" && $num != null)
  631.                     $originalFileName $num;
  632.                 if ($projet_id == true)
  633.                     $this->set_session_img_upload('ImagesUploaded'$originalFileName$path$request);
  634.                 return $path;
  635.             }
  636.             if ($frais_projet[0] == true and $frais_projet[1] == true) {
  637.                 $response = [];
  638.                 $path "/uploads/" date("Y") . '/' date("m") . '/' date("d") . '/' $filename;
  639.                 if ($originalFileName == "" && $num != null)
  640.                     $originalFileName $num;
  641.                 $response[] = $this->twig->render('document/document_liste.html.twig', ['id' => $num'path' => $path]);
  642.                 $response[] = $path;
  643.                 $this->set_session_img_upload('ImagesUploaded_frais'$originalFileName$path$request);
  644.                 return $response;
  645.             }
  646.             array_pop($image_ext);
  647.             $add_to_session false;
  648.             if ($use_file_extenstion) {
  649.                 $add_to_session true;
  650.                 $response $this->twig->render('document/file_container.html.twig', ['id' => $num'path' => $path'isImage' => in_array(strtoupper($extension), $image_ext), 'filename' => $originalFileName]);
  651.             } elseif ($update_file) {
  652.                 $response = ["path" => $path"isImage" => in_array(strtoupper($extension), $image_ext), 'filename' => $originalFileName];
  653.             } else {
  654.                 $add_to_session true;
  655.                 $response $this->twig->render('document/document_liste.html.twig', ['id' => $num'path' => $path]);
  656.             }
  657.             if ($add_to_session)
  658.                 $this->set_session_img_upload('ImagesUploaded'$originalFileName$path$request);
  659.             return $response;
  660.         }
  661.         return false;
  662.     }
  663.     public function getIconFile($extension)
  664.     {
  665.         if (in_array(strtoupper($extension), $this->image_extensions))
  666.             return "image";
  667.         else
  668.             return "pe-7s-file";
  669.         if ($extension == "pdf")
  670.             return 'fa-file-pdf';
  671.         else if ($extension == "docx")
  672.             return 'fa-file-word';
  673.         else if ($extension == "pptx")
  674.             return 'fa-file-powerpoint';
  675.         else if ($extension == "mkv")
  676.             return 'fa-file-video';
  677.         else if ($extension == "zip")
  678.             return 'fa-file-archive';
  679.     }
  680.     public function set_session_img_upload($session_name$file_name$path$request)
  681.     {
  682.         $session $request->getSession();
  683.         $images $session->get($session_name, []);
  684.         $images[$file_name] = $path;
  685.         $session->set($session_name$images);
  686.     }
  687.     public function generate_pdf($html$vars = array(), $filename 'download.pdf'$path$size 'A4')
  688.     {
  689.         // Run wkhtmltopdf
  690.         $descriptorspec = array(
  691.             => array('pipe''r'), // stdin
  692.             => array('pipe''w'), // stdout
  693.             => array('pipe''w'), // stderr
  694.         );
  695.         $process proc_open('wkhtmltopdf -q -d 72 --page-size ' $size ' --encoding UTF-8 -T 0mm -B 0mm -L 0mm -R 0mm -O landscape - -'$descriptorspec$pipes);
  696.         // Send the HTML on stdin
  697.         fwrite($pipes[0], $html);
  698.         fclose($pipes[0]);
  699.         // Read the outputs
  700.         $pdf stream_get_contents($pipes[1]);
  701.         $errors stream_get_contents($pipes[2]);
  702.         // Close the process
  703.         fclose($pipes[1]);
  704.         $return_value proc_close($process);
  705.         // Output the results
  706.         if ($errors) {
  707.             throw new Exception('PDF generation failed: ' $errors);
  708.         } else {
  709.             file_put_contents($path $filename$pdf);
  710.             return $pdf;
  711.         }
  712.     }
  713.     public function removeSpecialCaracters($str)
  714.     {
  715.         $search = array('À''Á''Â''Ã''Ä''Å''Ç''È''É''Ê''Ë''Ì''Í''Î''Ï''Ò''Ó''Ô''Õ''Ö''Ù''Ú''Û''Ü''Ý''à''á''â''ã''ä''å''ç''è''é''ê''ë''ì''í''î''ï''ð''ò''ó''ô''õ''ö''ù''ú''û''ü''ý''ÿ');
  716.         $replace = array('A''A''A''A''A''A''C''E''E''E''E''I''I''I''I''O''O''O''O''O''U''U''U''U''Y''a''a''a''a''a''a''c''e''e''e''e''i''i''i''i''o''o''o''o''o''o''u''u''u''u''y''y');
  717.         return str_replace($search$replace$str);
  718.     }
  719.     public function resetCookieIndicateur()
  720.     {
  721.         $cookies $this->requestStack->getCurrentRequest()->cookies;
  722.         if ($cookies->has('indicateurs')) {
  723.             $response = new Response();
  724.             $response->headers->clearCookie('indicateurs''/'null);
  725.             $response->sendHeaders();
  726.         }
  727.     }
  728.     public function getDefaultView($matriceVue)
  729.     {
  730.         $defaultView = array();
  731.         foreach ($matriceVue as $key => $value) {
  732.             $defaultView[$key] = $value["default"];
  733.         }
  734.         ;
  735.         return ($defaultView);
  736.     }
  737.     public function getWidths()
  738.     {
  739.         $widthsColumnsView = array();
  740.         foreach ($this->widthsAndDefaultView as $key => $value) {
  741.             $widthsColumnsView[$key] = $value["width"];
  742.         }
  743.         ;
  744.         return ($widthsColumnsView);
  745.     }
  746.     public function getTotalInterventionProjet($project_id$update false)
  747.     {
  748.         $project $this->em->getRepository(Projects::class)->find($project_id);
  749.         $interventions $this->em->getRepository(Interventions::class)->projectInterventionByProjectAndIntervenantPlanifer($project_id);
  750.         $duree_total 0;
  751.         foreach ($interventions as $intervention) {
  752.             $difference $intervention->GetDureeIntervention();
  753.             $duree 0;
  754.             if ($difference) {
  755.                 $duree = ($difference->24 60) + ($difference->60) + $difference->i;
  756.                 $users $this->em->getRepository(InterventionAffectedUsers::class)->getInterveneatnCount($intervention->getId()) ?? 0;
  757.                 $duree *= $users;
  758.                 $duree_total += $duree;
  759.             }
  760.         }
  761.         $result $this->FormattedDuration($duree_total);
  762.         if ($update) {
  763.             $project->setNbHeurePlanifier($duree_total);
  764.             $this->em->persist($project);
  765.             $this->em->flush();
  766.             return;
  767.         }
  768.         return $result;
  769.     }
  770.     public function getProjectIntervenantsInterventions($project_id$date null$date_fin null$orderByDate false$without_date_limit false)
  771.     {
  772.         $project $this->em->getRepository(Projects::class)->find($project_id);
  773.         $projectUsers $this->em->getRepository(ProjectUsers::class)->findBy(["project" => $project_id"type" => ["intervenant""jointeur"]]);
  774.         $interventions = array();
  775.         $users = array();
  776.         if ($date and is_null($date_fin)) {
  777.             $start_date $end_date $date->format("Y-m-d");
  778.             $date_debut = new \DateTime($date->format("Y-m-d"));
  779.             $date_fin $date->add(new \DateInterval('P1D'));
  780.         } else {
  781.             if ($date and $date_fin) {
  782.                 $date_debut $date;
  783.             } else {
  784.                 $date_debut = clone $project->getDateDebut();
  785.                 $date_fin = clone $project->getDateFin();
  786.             }
  787.             $start_date $date_debut->format("Y-m-d");
  788.             $end_date $date_fin->format("Y-m-d");
  789.             $date_fin $date_fin->modify('+1 day');
  790.         }
  791.         $days = new \DatePeriod($date_debut, new \DateInterval('P1D'), $date_fin);
  792.         foreach ($projectUsers as $element) {
  793.             $user $element->getUser();
  794.             $user_object = array();
  795.             $user_object["label"] = $this->getPrefixUser($user) . $user->getNom() . ' ' $user->getPrenom();
  796.             $user_object["id"] = $user->getId();
  797.             $user_object["path"] = "";
  798.             array_push($users$user_object);
  799.             $filters = [
  800.                 'users' => [$user->getId()],
  801.                 'projects' => [$project_id]
  802.             ];
  803.             if (!$without_date_limit) {
  804.                 $filters['start_date'] = $start_date;
  805.                 $filters['end_date'] = $end_date;
  806.             }
  807.             $user_interventions $this->InterventionsRepository->getInterventionsByFilters($filters$orderByDate);
  808.             if ($without_date_limit) {
  809.                 foreach ($user_interventions as $key => $intervention) {
  810.                     $interventions[$user->getId()][] = $intervention;
  811.                 }
  812.             } else {
  813.                 foreach ($days as $day) {
  814.                     foreach ($user_interventions as $key => $intervention) {
  815.                         if ($intervention["date"] == $day)
  816.                             $interventions[$user->getId()][] = $intervention;
  817.                     }
  818.                 }
  819.             }
  820.         }
  821.         return array(
  822.             "users" => $users,
  823.             "interventions" => $interventions,
  824.         );
  825.     }
  826.     function update_user_duree_intervention($action null$old_intervention null$new_intervention null$OldInterventionAffectedUsers null)
  827.     {
  828.         if ($action == "update") {
  829.             if ($new_intervention) {
  830.                 $NewInterventionAffectedUsers $this->em->getRepository(InterventionAffectedUsers::class)->findBy(array('intervention' => $new_intervention->getId()));
  831.                 foreach ($NewInterventionAffectedUsers as $NewuserAffected) {
  832.                     $this->set_user_duree($NewuserAffected->getUser());
  833.                 }
  834.             }
  835.             if ($old_intervention) {
  836.                 $OldInterventionAffectedUsers $this->em->getRepository(InterventionAffectedUsers::class)->findBy(array('intervention' => $old_intervention->getId()));
  837.                 foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
  838.                     $this->set_user_duree($OlduserAffected->getUser());
  839.                 }
  840.             }
  841.             if ($OldInterventionAffectedUsers) {
  842.                 foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
  843.                     $this->set_user_duree($OlduserAffected->getUser());
  844.                 }
  845.             }
  846.         }
  847.         if ($action == "delete") {
  848.             foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
  849.                 $this->set_user_duree($OlduserAffected->getUser());
  850.             }
  851.         }
  852.         return new Response("done");
  853.     }
  854.     public function getProjectEquipesInterventions($project_id$date null$date_fin null$orderByDate false$without_date_limit false)
  855.     {
  856.         $project $this->em->getRepository(Projects::class)->find($project_id);
  857.         $projectEquipes $this->em->getRepository(ProjectEquipe::class)->findBy(["project" => $project_id]);
  858.         $interventions = array();
  859.         $equipes = array();
  860.         if ($date and is_null($date_fin)) {
  861.             $start_date $end_date $date->format("Y-m-d");
  862.             $date_debut = new \DateTime($date->format("Y-m-d"));
  863.             $date_fin $date->add(new \DateInterval('P1D'));
  864.         } else {
  865.             if ($date and $date_fin) {
  866.                 $date_debut $date;
  867.             } else {
  868.                 $date_debut = clone $project->getDateDebut();
  869.                 $date_fin = clone $project->getDateFin();
  870.             }
  871.             $start_date $date_debut->format("Y-m-d");
  872.             $end_date $date_fin->format("Y-m-d");
  873.             $date_fin $date_fin->modify('+1 day');
  874.         }
  875.         $days = new \DatePeriod($date_debut, new \DateInterval('P1D'), $date_fin);
  876.         foreach ($projectEquipes as $element) {
  877.             $equipe $element->getEquipe();
  878.             $object = array();
  879.             $object["libelle"] = "Equipe " $equipe->getLibelle();
  880.             $object["id"] = $equipe->getId();
  881.             $object["path"] = "";
  882.             $equipes_users $this->em->getRepository(Equipes::class)->findListUsers($equipe->getId());
  883.             $users_ids = array();
  884.             foreach ($equipes_users as $equipe_user) {
  885.                 $users_ids[] = $equipe_user["id"];
  886.             }
  887.             $object["users"] = $users_ids;
  888.             array_push($equipes$object);
  889.             $filters = [
  890.                 'equipes' => [$equipe->getId()],
  891.                 'projects' => [$project_id]
  892.             ];
  893.             if (!$without_date_limit) {
  894.                 $filters['start_date'] = $start_date;
  895.                 $filters['end_date'] = $end_date;
  896.             }
  897.             $equipe_interventions $this->InterventionsRepository->getInterventionsByFilters($filters$orderByDate);
  898.             if ($without_date_limit) {
  899.                 foreach ($equipe_interventions as $key => $intervention) {
  900.                     $interventions[$equipe->getId()][] = $intervention;
  901.                 }
  902.             } else {
  903.                 foreach ($days as $day) {
  904.                     foreach ($equipe_interventions as $key => $intervention) {
  905.                         if ($intervention["date"] == $day)
  906.                             $interventions[$equipe->getId()][] = $intervention;
  907.                     }
  908.                 }
  909.             }
  910.         }
  911.         return array(
  912.             "equipes" => $equipes,
  913.             "equipes_interventions" => $interventions,
  914.         );
  915.     }
  916.     public function add_notification($id_user$content$id_intervention null)
  917.     {
  918.         $user $this->em->getRepository(User::class)->find($id_user);
  919.         $notification = new Notifications();
  920.         if ($id_intervention) {
  921.             $intervention $this->em->getRepository(Interventions::class)->find($id_intervention);
  922.             $notification->setIntervention($intervention);
  923.         }
  924.         $notification->setUser($user);
  925.         $notification->setContent($content);
  926.         $notification->setDateCreation(new \DateTime());
  927.         $this->em->persist($notification);
  928.         $this->em->flush();
  929.     }
  930.     public function getNumberNotifications()
  931.     {
  932.         $user $this->tokenStorage->getToken()->getUser();
  933.         $notifications $this->em->getRepository(Notifications::class)->findBy(array('user' => $user'readed' => null));
  934.         $count 0;
  935.         if ($notifications)
  936.             $count count($notifications);
  937.         return $count;
  938.     }
  939.     public function getDureeUntilToday($date)
  940.     {
  941.         $dateRecent = new \DateTime($date);
  942.         $today = new \DateTime('now');
  943.         $interval $dateRecent->diff($today);
  944.         if ($interval->days) {
  945.             if ($interval->days == 1)
  946.                 $duree "un jour";
  947.             else
  948.                 $duree $interval->days " jours";
  949.         } elseif ($interval->h) {
  950.             if ($interval->== 1)
  951.                 $duree "une heure";
  952.             else
  953.                 $duree $interval->" heures";
  954.         } elseif ($interval->i) {
  955.             if ($interval->== 1)
  956.                 $duree "une minute";
  957.             else
  958.                 $duree $interval->" minutes";
  959.         } else {
  960.             $duree "quelques secondes";
  961.         }
  962.         return $duree;
  963.     }
  964.     public function getEntrepriseHoursFromDate($date$planification_auto false)
  965.     {
  966.         $entreprise_id $this->container->getParameter('entreprise_id');
  967.         $entreprise $this->em->getRepository(Entreprise::class)->find($entreprise_id);
  968.         $days array_keys($this->days);
  969.         $horaires $entreprise->getHoraires();
  970.         $day_num intval($date->format("N")) - 1;
  971.         if (!$planification_auto) {
  972.             $morning_start self::MORNING_START;
  973.             $morning_end self::MORNING_END;
  974.             $midday_start self::MIDDAY_START;
  975.             $midday_end self::MIDDAY_END;
  976.         } else {
  977.             $morning_start "";
  978.             $morning_end "";
  979.             $midday_start "";
  980.             $midday_end "";
  981.         }
  982.         if ($horaires[$days[$day_num]]["matin"]["closed"] == false) {
  983.             if ($horaires[$days[$day_num]]["matin"]["debut"])
  984.                 $morning_start $horaires[$days[$day_num]]["matin"]["debut"];
  985.             if ($horaires[$days[$day_num]]["matin"]["fin"])
  986.                 $morning_end $horaires[$days[$day_num]]["matin"]["fin"];
  987.         }
  988.         if ($horaires[$days[$day_num]]["apresMidi"]["closed"] == false) {
  989.             if ($horaires[$days[$day_num]]["apresMidi"]["debut"])
  990.                 $midday_start $horaires[$days[$day_num]]["apresMidi"]["debut"];
  991.             if ($horaires[$days[$day_num]]["apresMidi"]["fin"])
  992.                 $midday_end $horaires[$days[$day_num]]["apresMidi"]["fin"];
  993.         }
  994.         return array(
  995.             'morning_start_hour' => $morning_start,
  996.             'morning_end_hour' => $morning_end,
  997.             'midday_start_hour' => $midday_start,
  998.             'midday_end_hour' => $midday_end
  999.         );
  1000.     }
  1001.     public function getListInterventions($lists_interventions_intervenants)
  1002.     {
  1003.         if (isset($lists_interventions_intervenants["interventions"]))
  1004.             $interventions $lists_interventions_intervenants["interventions"];
  1005.         else
  1006.             $interventions $lists_interventions_intervenants["equipes_interventions"];
  1007.         $interventionsByUser array_values($interventions);
  1008.         $array_interventions = array();
  1009.         foreach ($interventionsByUser as $interventionByUser) {
  1010.             $array_interventions array_merge($array_interventions$interventionByUser);
  1011.         }
  1012.         return $array_interventions;
  1013.     }
  1014.     public function getListIntervenants($lists_interventions_intervenants)
  1015.     {
  1016.         $all_users $lists_interventions_intervenants["users"];
  1017.         $interventions $lists_interventions_intervenants["interventions"];
  1018.         $interventions_users array_keys($interventions);
  1019.         $result array_filter($all_users, function ($value$key) use ($interventions_users) {
  1020.             return in_array($value["id"], $interventions_users);
  1021.         }, ARRAY_FILTER_USE_BOTH);
  1022.         return $result;
  1023.     }
  1024.     public function getListEquipes($lists_interventions_intervenants)
  1025.     {
  1026.         $all_equipes $lists_interventions_intervenants["equipes"];
  1027.         $interventions $lists_interventions_intervenants["equipes_interventions"];
  1028.         $interventions_equipes array_keys($interventions);
  1029.         $result array_filter($all_equipes, function ($value$key) use ($interventions_equipes) {
  1030.             return in_array($value["id"], $interventions_equipes);
  1031.         }, ARRAY_FILTER_USE_BOTH);
  1032.         return $result;
  1033.     }
  1034.     public function timeToMinute($time)
  1035.     {
  1036.         $start_date = new \DateTime('now');
  1037.         $difference $start_date->modify("+1 minutes")->diff(new \DateTime('now +' $time));
  1038.         $duree = ($difference->24 60) + ($difference->60) + $difference->i;
  1039.         return $duree;
  1040.     }
  1041.     public function minuteToInputTime($minutes)
  1042.     {
  1043.         $heures 0;
  1044.         while ($minutes >= 60) {
  1045.             $heures++;
  1046.             $minutes -= 60;
  1047.         }
  1048.         $time $this->intToStrForTime($heures) . ":" $this->intToStrForTime($minutes);
  1049.         return $time;
  1050.     }
  1051.     function intToStrForTime($int)
  1052.     {
  1053.         if ($int == 0)
  1054.             return '00';
  1055.         elseif ($int <= 9)
  1056.             return '0' $int;
  1057.         elseif ($int >= 10)
  1058.             return $int;
  1059.         else
  1060.             return '99';
  1061.     }
  1062.     public function calc_taux_frais($id_projet)
  1063.     {
  1064.         $projet $this->em->getRepository(Projects::class)->find($id_projet);
  1065.         $projet_frais $this->em->getRepository(ProjectFrais::class)->findBy(['project' => $projet'deleted' => null]);
  1066.         $taux_frais 0;
  1067.         foreach ($projet_frais as $val) {
  1068.             $taux_frais += $val->getQuantity() * $val->getPrixUnitaire();
  1069.         }
  1070.         return $taux_frais;
  1071.     }
  1072.     public function total_main_oeuvre($id)
  1073.     {
  1074.         $total_main_oeuvre $this->em->getRepository('App\Entity\ProjectSuiviTravaux')->getTotalMainOeuvre($id);
  1075.         return $total_main_oeuvre ?? 0;
  1076.     }
  1077.     public function restant_facture_regler($id null)
  1078.     {
  1079.         $request $this->requestStack->getCurrentRequest();
  1080.         if ($request->get("id_projet"))
  1081.             $id $request->get("id_projet");
  1082.         if (!$request->get("devis")) {
  1083.             ;
  1084.             $projet $this->em->getRepository(Projects::class)->find($id);
  1085.             $devis $projet->getDevis();
  1086.         } else {
  1087.             $devis floatval($request->get("devis"));
  1088.         }
  1089.         $projet_facturation $this->em->getRepository(ProjectFacturation::class)->findBy(["project" => $id]);
  1090.         $facture 0;
  1091.         $regler 0;
  1092.         foreach ($projet_facturation as $val) {
  1093.             $facture += $val->getMontantFacture();
  1094.             $regler += $val->getMontantRegle();
  1095.         }
  1096.         ;
  1097.         if ($request->get("id_projet"))
  1098.             return new Response(json_encode(["facture" => $facture"regler" => $regler]));
  1099.         else
  1100.             return [$facture$regler];
  1101.     }
  1102.     private function setJointeurItem(&$item)
  1103.     {
  1104.         if (array_key_exists("user_id"$item) && array_key_exists("project_id"$item)) {
  1105.             $project_user $this->em->getRepository(ProjectUsers::class)->findOneBy(["project" => $item["project_id"], "user" => $item["user_id"], "type" => "jointeur"]);
  1106.             if ($project_user)
  1107.                 $item["dotted_border"] = true;
  1108.         }
  1109.     }
  1110.     private function getItemForWeekType($old_date$intervention_date$week_start$week_end$item$items$client_name$is_last_intervention$get_clients)
  1111.     {
  1112.         $next_date = clone $old_date;
  1113.         $next_date->add(new \DateInterval("P7D"));
  1114.         $intervention_date_str $intervention_date->format("Y-m-d");
  1115.         $is_in_same_or_next_week $intervention_date_str >= substr($item['start_date'], 010) && ($intervention_date_str <= $week_end->format("Y-m-d") || $intervention_date_str <= $next_date->format("Y-m-d"));
  1116.         if ($is_last_intervention) {
  1117.             if ($is_in_same_or_next_week) {
  1118.                 if ($get_clients && !in_array($client_name$item['clients']))
  1119.                     $item['clients'][] = $client_name;
  1120.                 $item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
  1121.                 if ($intervention_date_str $week_end->format('Y-m-d'))
  1122.                     $item['end_date'] = $next_date->format('Y-m-d') . " 23:59:00";
  1123.             } else {
  1124.                 $item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
  1125.                 $this->setJointeurItem($item);
  1126.                 $items[] = $item;
  1127.                 $week_dates $this->getWeekStartAndEndDate($intervention_date);
  1128.                 $week_start $week_dates['week_start'];
  1129.                 $week_end $week_dates['week_end'];
  1130.                 $item['start_date'] = $week_start->format('Y-m-d 00:00:00');
  1131.                 $item['end_date'] = $week_end->format('Y-m-d') . " 23:59:00";
  1132.                 if ($get_clients)
  1133.                     $item['clients'] = [$client_name];
  1134.             }
  1135.             $this->setJointeurItem($item);
  1136.             $items[] = $item;
  1137.         } else {
  1138.             if ($is_in_same_or_next_week) {
  1139.                 if ($get_clients && !in_array($client_name$item['clients']))
  1140.                     $item['clients'][] = $client_name;
  1141.                 if ($intervention_date_str $week_end->format('Y-m-d'))
  1142.                     $old_date $next_date;
  1143.             } else {
  1144.                 $item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
  1145.                 $this->setJointeurItem($item);
  1146.                 $items[] = $item;
  1147.                 if ($get_clients)
  1148.                     $item['clients'] = [$client_name];
  1149.                 $week_dates $this->getWeekStartAndEndDate($intervention_date);
  1150.                 $week_start $week_dates['week_start'];
  1151.                 $item['start_date'] = $week_start->format('Y-m-d 00:00:00');
  1152.                 $old_date $week_end $week_dates['week_end'];
  1153.             }
  1154.         }
  1155.         return array(
  1156.             'item' => $item,
  1157.             'items' => $items,
  1158.             'old_date' => $old_date,
  1159.             'week_start' => $old_date,
  1160.             'week_end' => $old_date,
  1161.         );
  1162.     }
  1163.     public function getClientForDate($start$end null$user_id null$equipe_id null)
  1164.     {
  1165.         $clients_ids = [];
  1166.         $clients_name = [];
  1167.         $end $end ?? $start;
  1168.         $filters = [
  1169.             "start_date" => $start,
  1170.             "end_date" => $end,
  1171.         ];
  1172.         if ($user_id)
  1173.             $filters["users"] = [$user_id];
  1174.         else
  1175.             $filters["equipes"] = [$equipe_id];
  1176.         $clients $this->em->getRepository(Interventions::class)->getInterventionsByFilters($filtersfalsefalsefalsefalsefalsetrue);
  1177.         return array_column($clients'client');
  1178.     }
  1179.     public function getItemForDayType($old_date$intervention_date$old_end_hour$item_end_hour$item$items$client_name$is_last_intervention$get_clients$graphic_view_colors$object_key$cookie_updated)
  1180.     {
  1181.         $next_date = clone $old_date;
  1182.         $next_date->add(new \DateInterval("P1D"));
  1183.         $is_same_client false;
  1184.         if ($intervention_date->format("Y-m-d") == $next_date->format("Y-m-d")) {
  1185.             if (isset($item["user_id"])) {
  1186.                 $old_client $this->getClientForDate($old_date->format("d-m-Y"), null$item["user_id"]);
  1187.                 $new_client $this->getClientForDate($next_date->format("d-m-Y"), null$item["user_id"]);
  1188.                 $is_same_client = empty(array_diff($old_client$new_client)) && empty(array_diff($new_client$old_client));
  1189.             }
  1190.             if (isset($item["equipe_id"])) {
  1191.                 $old_client $this->getClientForDate($old_date->format("d-m-Y"), nullnull$item["equipe_id"]);
  1192.                 $new_client $this->getClientForDate($next_date->format("d-m-Y"), nullnull$item["equipe_id"]);
  1193.                 $is_same_client = empty(array_diff($old_client$new_client)) && empty(array_diff($new_client$old_client));
  1194.             }
  1195.         }
  1196.         if ($is_last_intervention) {
  1197.             if ($intervention_date->format("Y-m-d") == $old_date->format("Y-m-d") || (($intervention_date->format("Y-m-d") == $next_date->format("Y-m-d")) && $is_same_client)) {
  1198.                 if ($get_clients && !in_array($client_name$item['clients']))
  1199.                     $item['clients'][] = $client_name;
  1200.                 $item['end_date'] = $intervention_date->format('Y-m-d') . " 23:59:00";
  1201.             } else {
  1202.                 $item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
  1203.                 $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1204.                 $items[] = $item;
  1205.                 $item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
  1206.                 $item['end_date'] = $intervention_date->format('Y-m-d') . " 23:59:00";
  1207.                 if ($get_clients)
  1208.                     $item['clients'] = [$client_name];
  1209.             }
  1210.             $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1211.             $items[] = $item;
  1212.         } else {
  1213.             if ($intervention_date->format("Y-m-d") == $old_date->format("Y-m-d") || (($intervention_date->format("Y-m-d") == $next_date->format("Y-m-d")) && $is_same_client)) {
  1214.                 if ($get_clients && !in_array($client_name$item['clients']))
  1215.                     $item['clients'][] = $client_name;
  1216.                 $old_date $intervention_date;
  1217.                 $old_end_hour $item_end_hour;
  1218.             } else {
  1219.                 $item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
  1220.                 $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1221.                 $items[] = $item;
  1222.                 if ($get_clients)
  1223.                     $item['clients'] = [$client_name];
  1224.                 $item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
  1225.                 $old_date $intervention_date;
  1226.             }
  1227.         }
  1228.         return array(
  1229.             'item' => $item,
  1230.             'items' => $items,
  1231.             'old_date' => $old_date,
  1232.             'old_end_hour' => $old_end_hour,
  1233.         );
  1234.     }
  1235.     public function addClinetColor(&$item$graphic_view_colors$object_key$cookie_updated)
  1236.     {
  1237.         $start_dateTime = \DateTime::createFromFormat('Y-m-d H:i:s'$item['start_date']);
  1238.         $end_dateTime = \DateTime::createFromFormat('Y-m-d H:i:s'$item['end_date']);
  1239.         $start $start_dateTime->format('Y-m-d');
  1240.         $end $end_dateTime->format('Y-m-d');
  1241.         $client_id null;
  1242.         if (isset($item["user_id"])) {
  1243.             $client_id $this->getClientForDate($start$end$item["user_id"])[0];
  1244.         }
  1245.         if (isset($item["equipe_id"])) {
  1246.             $client_id $this->getClientForDate($start$endnull$item["equipe_id"])[0];
  1247.         }
  1248.         $color_item $this->getItemColor($client_id$graphic_view_colors$object_key$cookie_updated)['item_color'];
  1249.         $item['color'] = $color_item;
  1250.         return $item;
  1251.     }
  1252.     private function getItemForHourType($item$items$intervention$isNewItem$item_start_date$intervention_date$old_date$old_start_hour$old_end_hour$client_name$is_last_intervention$get_clients$graphic_view_colors$object_key$cookie_updated)
  1253.     {
  1254.         $item_hours $this->getItemHours($intervention);
  1255.         $item_start_hour $item_hours['item_start_hour'];
  1256.         $item_end_hour $item_hours['item_end_hour'];
  1257.         if ($isNewItem || ($item_start_date == $intervention_date->format("Y-m-d") && $item_start_hour $old_start_hour))
  1258.             $old_start_hour $item_start_hour;
  1259.         if ($old_end_hour == null)
  1260.             $old_end_hour $item_end_hour;
  1261.         if ($is_last_intervention) {
  1262.             if ($get_clients)
  1263.                 $items $this->addLastItemWeekView($intervention_date$old_date$item$items$item_start_date$item_start_hour$item_end_hour$old_start_hour$old_end_hour$client_name$graphic_view_colors$object_key$cookie_updated);
  1264.             else
  1265.                 $items $this->addLastItemWeekView($intervention_date$old_date$item$items$item_start_date$item_start_hour$item_end_hour$old_start_hour$old_end_hourfalse$graphic_view_colors$object_key$cookie_updated);
  1266.         } else {
  1267.             $next_date = clone $old_date;
  1268.             $next_date->add(new \DateInterval("P1D"));
  1269.             $isSameDay $intervention_date->format("Y-m-d") == $old_date->format("Y-m-d");
  1270.             $isNextDay $intervention_date->format("Y-m-d") == $next_date->format("Y-m-d");
  1271.             $isNextHour $old_end_hour == "23:59:00" && $item_start_hour == "00:00:00";
  1272.             $is_same_client false;
  1273.             if (($isNextDay && $isNextHour) || ($isSameDay && ($old_end_hour == "11:59:00" && $item_start_hour == "12:00:00"))) {
  1274.                 $old_time_start $old_date->format("d-m-Y") . " " $old_start_hour;
  1275.                 $old_time_end $old_date->format("d-m-Y") . " " $old_end_hour;
  1276.                 if ($isNextDay) {
  1277.                     $new_time_start $next_date->format("d-m-Y") . " " $item_start_hour;
  1278.                     $new_time_end $next_date->format("d-m-Y") . " " $item_end_hour;
  1279.                 } else {
  1280.                     $new_time_start $old_date->format("d-m-Y") . " " $item_start_hour;
  1281.                     $new_time_end $old_date->format("d-m-Y") . " " $item_end_hour;
  1282.                 }
  1283.                 if (isset($item["user_id"])) {
  1284.                     $old_client $this->getClientForDate($old_time_start$old_time_end$item["user_id"]);
  1285.                     $new_client $this->getClientForDate($new_time_start$new_time_end$item["user_id"]);
  1286.                     $is_same_client = empty(array_diff($old_client$new_client)) && empty(array_diff($new_client$old_client));
  1287.                 }
  1288.                 if (isset($item["equipe_id"])) {
  1289.                     $old_client $this->getClientForDate($old_date->format("d-m-Y"), nullnull$item["equipe_id"]);
  1290.                     $new_client $this->getClientForDate($next_date->format("d-m-Y"), nullnull$item["equipe_id"]);
  1291.                     $is_same_client = empty(array_diff($old_client$new_client)) && empty(array_diff($new_client$old_client));
  1292.                 }
  1293.             }
  1294.             if ($isSameDay || ($isNextDay && $isNextHour && $is_same_client)) {
  1295.                 if ($get_clients && !in_array($client_name$item['clients']))
  1296.                     $item['clients'][] = $intervention->getClient()->GetLibelleClient();
  1297.                 $old_date $intervention_date;
  1298.                 $old_end_hour $item_end_hour;
  1299.             } else {
  1300.                 $item['start_date'] = $item_start_date ' ' $old_start_hour;
  1301.                 $item['end_date'] = $old_date->format('Y-m-d') . ' ' $old_end_hour;
  1302.                 $old_date $intervention_date;
  1303.                 $item_start_date $intervention_date->format('Y-m-d');
  1304.                 $old_start_hour $item_start_hour;
  1305.                 $old_end_hour $item_end_hour;
  1306.                 $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1307.                 $items[] = $item;
  1308.                 if ($get_clients)
  1309.                     $item['clients'] = [$client_name];
  1310.             }
  1311.         }
  1312.         return array(
  1313.             'item' => $item,
  1314.             'items' => $items,
  1315.             'old_date' => $old_date,
  1316.             'old_start_hour' => $old_start_hour,
  1317.             'old_end_hour' => $old_end_hour,
  1318.             'item_start_date' => $item_start_date,
  1319.         );
  1320.     }
  1321.     public function getWeekStartAndEndDate($date$year null)
  1322.     {
  1323.         $week $date->format("W");
  1324.         if (!$year)
  1325.             $year $date->format("Y");
  1326.         $week_start = clone $date;
  1327.         $week_start $week_start->setISODate($year$week1);
  1328.         if ($week_start $date)
  1329.             $week_start->setISODate(--$year$week1);
  1330.         $week_end = clone $week_start;
  1331.         $week_end $week_end->modify("+6 days");
  1332.         return array(
  1333.             'week_start' => $week_start,
  1334.             'week_end' => $week_end
  1335.         );
  1336.     }
  1337.     public function getItemsForUsersAndMateriels($object_id$object_key$interventions$items$item$show_type$cookie_updated$graphic_view_colors$projects null)
  1338.     {
  1339.         $old_date null;
  1340.         $item_start_date null;
  1341.         $item_start_hour null;
  1342.         $item_end_hour null;
  1343.         $old_start_hour null;
  1344.         $old_end_hour null;
  1345.         $get_clients false;
  1346.         $week_start null;
  1347.         $week_end null;
  1348.         foreach ($interventions as $key => $intervention) {
  1349.             if (is_array($intervention))
  1350.                 $intervention_date $intervention['date'];
  1351.             else {
  1352.                 $intervention_date $intervention->getDate();
  1353.                 $get_clients true;
  1354.             }
  1355.             $isNewItem false;
  1356.             if ($old_date == null) {
  1357.                 if ($item_start_date != null && $show_type == "hour") {
  1358.                     $old_date = new \Datetime($item_start_date);
  1359.                 } else {
  1360.                     $isNewItem true;
  1361.                     $old_date $intervention_date;
  1362.                     $item_start_date $intervention_date->format('Y-m-d');
  1363.                     if ($show_type === "week") {
  1364.                         $week_dates $this->getWeekStartAndEndDate($intervention_date);
  1365.                         $week_start $week_dates['week_start'];
  1366.                         $old_date $week_end $week_dates['week_end'];
  1367.                         $item['start_date'] = $week_start->format('Y-m-d 00:00:00');
  1368.                     }
  1369.                 }
  1370.                 if ($projects) {
  1371.                     if (array_key_exists("project_id"$item) && array_key_exists($item["project_id"], $projects) && array_key_exists("color"$projects[$item["project_id"]]))
  1372.                         $item['project_color'] = $projects[$item["project_id"]]["color"];
  1373.                     else {
  1374.                         $project_key array_search($item["project_id"], array_column($projects'id'));
  1375.                         $item['project_color'] = $projects[$project_key]["color"];
  1376.                     }
  1377.                 } elseif ($object_id) {
  1378.                     $item_color_result $this->getItemColor($object_id$graphic_view_colors$object_key$cookie_updated);
  1379.                     $item['color'] = $item_color_result['item_color'];
  1380.                     $cookie_updated $item_color_result['cookie_updated'];
  1381.                     $graphic_view_colors $item_color_result['graphic_view_colors'];
  1382.                 }
  1383.                 if ($show_type == "day")
  1384.                     $item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
  1385.             }
  1386.             if ($get_clients && !array_key_exists('clients'$item))
  1387.                 $item['clients'] = [];
  1388.             $client_name $get_clients $intervention->getClient()->GetLibelleClient() : null;
  1389.             $is_last_intervention $key == (count($interventions) - 1);
  1390.             if ($show_type === "day" || $show_type === "week") {
  1391.                 $items_result = [];
  1392.                 if ($show_type === "day") {
  1393.                     $items_result $this->getItemForDayType($old_date$intervention_date$old_end_hour$item_end_hour$item$items$client_name$is_last_intervention$get_clients$graphic_view_colors$object_key$cookie_updated);
  1394.                     $old_end_hour $items_result['old_end_hour'];
  1395.                 } else {
  1396.                     $items_result $this->getItemForWeekType($old_date$intervention_date$week_start$week_end$item$items$client_name$is_last_intervention$get_clients);
  1397.                     $week_start $items_result['week_start'];
  1398.                     $week_end $items_result['week_end'];
  1399.                 }
  1400.                 $item $items_result['item'];
  1401.                 $items $items_result['items'];
  1402.                 $old_date $items_result['old_date'];
  1403.             } else {
  1404.                 $hour_items_result $this->getItemForHourType($item$items$intervention$isNewItem$item_start_date$intervention_date$old_date$old_start_hour$old_end_hour$client_name$is_last_intervention$get_clients$graphic_view_colors$object_key$cookie_updated);
  1405.                 $item $hour_items_result['item'];
  1406.                 $items $hour_items_result['items'];
  1407.                 $old_date $hour_items_result['old_date'];
  1408.                 $old_start_hour $hour_items_result['old_start_hour'];
  1409.                 $old_end_hour $hour_items_result['old_end_hour'];
  1410.                 $item_start_date $hour_items_result['item_start_date'];
  1411.             }
  1412.         }
  1413.         return array(
  1414.             "items" => $items,
  1415.             "graphic_view_colors" => $graphic_view_colors,
  1416.             "cookie_updated" => $cookie_updated,
  1417.         );
  1418.     }
  1419.     private function getItemHours($intervention)
  1420.     {
  1421.         $date null;
  1422.         $start_hour null;
  1423.         $end_hour null;
  1424.         if (is_array($intervention)) {
  1425.             $date $intervention['date'];
  1426.             $start_hour $intervention["heure_debut"];
  1427.             $end_hour $intervention["heure_fin"];
  1428.         } else {
  1429.             $date $intervention->getDate();
  1430.             $start_hour $intervention->getHeureDebut();
  1431.             $end_hour $intervention->getHeureFin();
  1432.         }
  1433.         $entreprise_horaires $this->getEntrepriseHoursFromDate($date);
  1434.         $morning_end_hour $entreprise_horaires["morning_end_hour"];
  1435.         $midday_start_hour $entreprise_horaires["midday_start_hour"];
  1436.         if ($start_hour $morning_end_hour)
  1437.             $item_start_hour '00:00:00';
  1438.         else
  1439.             $item_start_hour '12:00:00';
  1440.         if ($end_hour $midday_start_hour)
  1441.             $item_end_hour '23:59:00';
  1442.         else
  1443.             $item_end_hour '11:59:00';
  1444.         return array(
  1445.             "item_start_hour" => $item_start_hour,
  1446.             "item_end_hour" => $item_end_hour,
  1447.         );
  1448.     }
  1449.     public function getItemColor($object_id$graphic_view_colors$i$cookie_updated)
  1450.     {
  1451.         $request $this->requestStack->getCurrentRequest();
  1452.         $cookies $request->cookies;
  1453.         if (array_key_exists($object_id$graphic_view_colors)) {
  1454.             $item_color $graphic_view_colors[$object_id];
  1455.         } else {
  1456.             // $Exsist = false ;
  1457.             // while (!$Exsist) {
  1458.             // $item_color = $this->getRandomColorCode();
  1459.             // if (!in_array( $item_color, array_values($graphic_view_colors)))        $Exsist = true;
  1460.             // }
  1461.             $cookie_updated true;
  1462.             $item_color $this->getRandomColorCode();
  1463.             $graphic_view_colors[$object_id] = $item_color;
  1464.         }
  1465.         return array(
  1466.             'item_color' => $item_color,
  1467.             'cookie_updated' => $cookie_updated,
  1468.             'graphic_view_colors' => $graphic_view_colors,
  1469.         );
  1470.     }
  1471.     function getRandomColorCode()
  1472.     {
  1473.         $r str_pad(dechex(rand(0255)), 2'0'STR_PAD_LEFT);
  1474.         $g str_pad(dechex(rand(0255)), 2'0'STR_PAD_LEFT);
  1475.         $b str_pad(dechex(rand(0255)), 2'0'STR_PAD_LEFT);
  1476.         $colorCode '#' $r $g $b;
  1477.         return $colorCode;
  1478.     }
  1479.     private function addLastItemWeekView($intervention_date$old_date$item$items$item_start_date$item_start_hour$item_end_hour$old_start_hour$old_end_hour$client_name$graphic_view_colors$object_key$cookie_updated)
  1480.     {
  1481.         $next_date = clone $old_date;
  1482.         $next_date->add(new \DateInterval("P1D"));
  1483.         if ($intervention_date->format("Y-m-d") == $old_date->format("Y-m-d") || ($next_date->format("Y-m-d") == $intervention_date->format('Y-m-d') && ($old_end_hour == "23:59:00" && $item_start_hour == "00:00:00"))) {
  1484.             $item['start_date'] = $item_start_date ' ' $old_start_hour;
  1485.             $item['end_date'] = $intervention_date->format('Y-m-d') . ' ' $item_end_hour;
  1486.             if ($client_name && !in_array($client_name$item['clients']))
  1487.                 $item['clients'][] = $client_name;
  1488.         } else {
  1489.             $item['start_date'] = $item_start_date ' ' $old_start_hour;
  1490.             $item['end_date'] = $old_date->format('Y-m-d') . ' ' $old_end_hour;
  1491.             $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1492.             $items[] = $item;
  1493.             if ($client_name)
  1494.                 $item['clients'] = [$client_name];
  1495.             $item['start_date'] = $intervention_date->format('Y-m-d') . ' ' $item_start_hour;
  1496.             $item['end_date'] = $intervention_date->format('Y-m-d') . ' ' $item_end_hour;
  1497.         }
  1498.         $item $this->addClinetColor($item$graphic_view_colors$object_key$cookie_updated);
  1499.         $items[] = $item;
  1500.         return $items;
  1501.     }
  1502.     public function pageTypeCookies($page_name$dataPageType)
  1503.     {
  1504.         $request $this->requestStack->getCurrentRequest();
  1505.         $session $request->getSession();
  1506.         $pageTypeValue $session->get('page-type', []);
  1507.         if (is_array($page_name)) {
  1508.             $pageTypeValue[$page_name[0]] = $dataPageType[0];
  1509.             $pageTypeValue[$page_name[1]] = $dataPageType[1];
  1510.         } else
  1511.             $pageTypeValue[$page_name] = $dataPageType;
  1512.         $session->set('page-type'$pageTypeValue);
  1513.     }
  1514.     public function GetTypeCookies($pageName$is_intervention false)
  1515.     {
  1516.         $request $this->requestStack->getCurrentRequest();
  1517.         $session $request->getSession();
  1518.         $pageTypeValue $session->get('page-type', []);
  1519.         if (isset($pageTypeValue[$pageName])) {
  1520.             if ($is_intervention) {
  1521.                 $res = array("path" => $pageTypeValue[$pageName]);
  1522.                 if (array_key_exists("InterventionsType"$pageTypeValue) && $pageTypeValue["InterventionsType"])
  1523.                     $res["type"] = $pageTypeValue["InterventionsType"];
  1524.                 return $res;
  1525.             }
  1526.             return $pageTypeValue[$pageName];
  1527.         } else {
  1528.             return "liste";
  1529.         }
  1530.     }
  1531.     public function checkClientAccess($id_clientUrlGeneratorInterface $urlGenerator null)
  1532.     {
  1533.         $connectionUrl $urlGenerator $urlGenerator->generate('connexion') : $this->router->generate('connexion');
  1534.         if (!$this->tokenStorage->getToken()) {
  1535.             return new RedirectResponse($connectionUrl);
  1536.         }
  1537.         $user $this->tokenStorage->getToken()->getUser();
  1538.         if (!$user) {
  1539.             return new RedirectResponse($connectionUrl);
  1540.         }
  1541.         $clientUser $user->getClient();
  1542.         if ($clientUser) {
  1543.             $id_clientUser $clientUser->getId();
  1544.             if ($id_clientUser != $id_client) {
  1545.                 return 'home';
  1546.             }
  1547.         }
  1548.         return "access";
  1549.     }
  1550.     public function getEntrepriseId()
  1551.     {
  1552.         $entreprise_id $this->container->getParameter('entreprise_id');
  1553.         return $entreprise_id;
  1554.     }
  1555.     public function objectFilterToArray($filter)
  1556.     {
  1557.         $parameters = array();
  1558.         if ($filter) {
  1559.             foreach ($filter as $key => $value) {
  1560.                 if ($value) {
  1561.                     if (strpos($key'[]')) {
  1562.                         $newkey str_replace('[]'''$key);
  1563.                         $parameters[$newkey] = $value;
  1564.                     } else {
  1565.                         if ($key !== "")
  1566.                             $parameters[$key] = $value;
  1567.                     }
  1568.                 }
  1569.             }
  1570.         }
  1571.         return $parameters;
  1572.     }
  1573.     public function add_intervention($client$address$items$start_date$start_hour$end_hour$project$is_intervention_add_check false$type null$isEquipe false$makeUpdateProductivity false$forceDureeCalc false)
  1574.     {
  1575.         $entreprise_id $this->container->getParameter('entreprise_id');
  1576.         $entreprise $this->em->getRepository(Entreprise::class)->find($entreprise_id);
  1577.         $intervention = new Interventions();
  1578.         $intervention->setClient($client);
  1579.         $intervention->setAdresseClient($address);
  1580.         if ($type)
  1581.             $intervention->setType($type);
  1582.         if ($project) {
  1583.             $intervention->setType("forfait_contrat_projets");
  1584.             $intervention->setProject($project);
  1585.         }
  1586.         $intervention->setClientName($client->GetLibelleClient());
  1587.         $intervention->setDate($start_date->format("Y-m-d"));
  1588.         $intervention->setHeureDebut($start_hour);
  1589.         $intervention->setHeureFin($end_hour);
  1590.         $client_interne $entreprise->getCompteInterne();
  1591.         $client_interne_id $client_interne->getId();
  1592.         if ($client->getId() != $client_interne_id) {
  1593.             $intervention->setSite($client->getSiteAffectation());
  1594.         } else {
  1595.             $site $this->em->getRepository(Site::class)->findOneBy(['adresse' => $address->getId()]);
  1596.             if ($site)
  1597.                 $intervention->setSite($site);
  1598.             if ($is_intervention_add_check) {
  1599.                 $intervention->setFacture("");
  1600.                 $intervention->setType("offert");
  1601.             }
  1602.         }
  1603.         $equipes = [];
  1604.         $users = [];
  1605.         $equipes_old_productivities = [];
  1606.         if ($is_intervention_add_check) {
  1607.             if ($items) {
  1608.                 $tab $items;
  1609.                 sort($tab);
  1610.                 $les_intervenant = [];
  1611.                 foreach ($tab as $interv) {
  1612.                     $test_type explode("|"$interv);
  1613.                     if ($test_type[0] == "e") {
  1614.                         $equipe $this->em->getRepository(Equipes::class)->find($test_type[1]);
  1615.                         $equipes[$equipe->getId()] = $equipe;
  1616.                         if ($makeUpdateProductivity && $project && $project->getIsAutoPlanified()) {
  1617.                             $equipes_old_productivities[$equipe->getId()] = $this->getEquipeProductivityByDate($equipe->getId(), $start_date->format("Y-m-d"))["old_productivite"];
  1618.                         }
  1619.                     } elseif ($test_type[0] == "u") {
  1620.                         array_push($les_intervenantintval($test_type[1]));
  1621.                     }
  1622.                 }
  1623.                 if (count($les_intervenant) > 0)
  1624.                     $users $les_intervenant;
  1625.                 else
  1626.                     $users = [];
  1627.             }
  1628.         } else {
  1629.             $intervention->setType("");
  1630.             $listTechniciensNames "";
  1631.             if ($isEquipe) {
  1632.                 $equipes = [$items];
  1633.             } else {
  1634.                 $users = [$items->getId()];
  1635.                 $intervention->setTechniciensNames($items->getNom() . " " $items->getPrenom() . "|");
  1636.             }
  1637.         }
  1638.         $intervention->setDescription("");
  1639.         $intervention->setFacture("");
  1640.         if ($project && !$is_intervention_add_check)
  1641.             $intervention->setEtatIntervention("resolu");
  1642.         $this->em->persist($intervention);
  1643.         $this->em->flush();
  1644.         $update_users $this->SetInterventionUsers($users$intervention);
  1645.         if (count($equipes) > 0)
  1646.             $update_equipes $this->setEquipes($equipes$intervention);
  1647.         if ($project) {
  1648.             $this->getTotalInterventionProjet($intervention->getProject()->getId(), true);
  1649.             $result $this->setProjectAffectedDayByIntervention($intervention'add');
  1650.         }
  1651.         if (!$is_intervention_add_check || $forceDureeCalc) {
  1652.             $this->setDureeIntervention($intervention);
  1653.         }
  1654.         if (count($equipes_old_productivities) > 0) {
  1655.             foreach ($equipes_old_productivities as $equipe_id => $equipe_old_productivity) {
  1656.                 $update_productivity_result $this->update_productivity($equipe_id$intervention->getDate()->format('Y-m-d'), $project->getId(), "add"$equipe_old_productivity);
  1657.             }
  1658.         }
  1659.         return $intervention;
  1660.     }
  1661.     public function setEquipes($equipes$intervention$updateProductivity false$old_equipes null)
  1662.     {
  1663.         foreach ($equipes as $equipe) {
  1664.             $old_productivity null;
  1665.             if ($updateProductivity && !in_array($equipe->getId(), $old_equipes)) {
  1666.                 $old_productivity $this->getEquipeProductivityByDate($equipe->getId(), $intervention->getDate()->format("Y-m-d"))["old_productivite"];
  1667.                 unset($old_equipes[$equipe->getId()]);
  1668.             }
  1669.             $this->addInterventionAffectedEquipe($intervention$equipe);
  1670.             if ($old_productivity !== null) {
  1671.                 $this->update_productivity($equipe->getId(), $intervention->getDate()->format('Y-m-d'), $intervention->getProject()->getId(), "add"$old_productivity);
  1672.             }
  1673.         }
  1674.     }
  1675.     public function addInterventionAffectedEquipe($intervention$equipe)
  1676.     {
  1677.         $interventionAffectedEquipe $this->em->getRepository(InterventionAffectedEquipes::class)->findOneBy(["equipe" => $equipe->getId(), "intervention" => $intervention->getId()]);
  1678.         if (!$interventionAffectedEquipe) {
  1679.             $InterventionAffectedEquipes = new InterventionAffectedEquipes();
  1680.             $InterventionAffectedEquipes->setEquipe($equipe);
  1681.             $InterventionAffectedEquipes->setIntervention($intervention);
  1682.             $this->em->persist($InterventionAffectedEquipes);
  1683.             $this->em->flush();
  1684.         }
  1685.     }
  1686.     function SetInterventionUsers($users$intervention$modify_check false$old_date null)
  1687.     {
  1688.         $projectUsersIds null;
  1689.         if ($intervention->getProject()) {
  1690.             $projectUsersIds = array();
  1691.             $projectUsers $this->em->getRepository(ProjectUsers::class)->findBy(["project" => $intervention->getProject()->getId()]);
  1692.             foreach ($projectUsers as $object) {
  1693.                 $projectUsersIds[] = $object->getUser()->getId();
  1694.             }
  1695.         }
  1696.         if (($users) && (strpos($users[0], "|") != false)) {
  1697.             $tab $users;
  1698.             sort($tab);
  1699.             $equipes_intervention = [];
  1700.             $les_intervenant = [];
  1701.             $intervEquipe $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
  1702.             $old_equipes = [];
  1703.             $updateProductivity $modify_check && $intervention->getProject() && $intervention->getProject()->getIsAutoPlanified();
  1704.             $date $intervention->getDate()->format("Y-m-d");
  1705.             if ($old_date !== null)
  1706.                 $date $old_date;
  1707.             if ($intervEquipe) {
  1708.                 foreach ($intervEquipe as $intervE) {
  1709.                     $old_productivity null;
  1710.                     $equipe_id $intervE->getEquipe()->getId();
  1711.                     $old_equipes[$equipe_id] = $equipe_id;
  1712.                     if ($updateProductivity) {
  1713.                         if (!in_array("e|" $equipe_id$tab)) {
  1714.                             $productivity $this->getEquipeProductivityByDate($intervE->getEquipe()->getId(), $datetrue);
  1715.                             $old_productivity $productivity["old_productivite"];
  1716.                             $new_productivity $productivity["new_productivite"];
  1717.                         }
  1718.                     }
  1719.                     if ($old_productivity != null) {
  1720.                         $dateObj = \DateTime::createFromFormat('Y-m-d'$date);
  1721.                         $this->add_project_intervention_task($intervention->getProject(), $intervE->getEquipe(), $dateObj$old_productivity$new_productivity);
  1722.                         $update_productivity_result $this->update_productivity($equipe_id$date$intervention->getProject()->getId(), "remove"$old_productivity);
  1723.                         $this->em->remove($intervE);
  1724.                         $this->em->flush();
  1725.                     }
  1726.                 }
  1727.             }
  1728.             //delete id equipe exist in the list tab and the database
  1729.             foreach ($intervEquipe as $i) {
  1730.                 if (in_array("e|" $i->getEquipe()->getId(), $tab)) {
  1731.                     $pos array_search("e|" $i->getEquipe()->getId(), $tab);
  1732.                     array_splice($tab$pos1);
  1733.                 }
  1734.             }
  1735.             //Add the new intervention
  1736.             foreach ($tab as $interv) {
  1737.                 $test_type explode("|"$interv);
  1738.                 if ($test_type[0] == "e") {
  1739.                     $equipe $this->em->getRepository(Equipes::class)->find($test_type[1]);
  1740.                     array_push($equipes_intervention$equipe);
  1741.                 } else {
  1742.                     array_push($les_intervenantintval($test_type[1]));
  1743.                 }
  1744.             }
  1745.             if (count($equipes_intervention) > 0)
  1746.                 $this->setEquipes($equipes_intervention$intervention$updateProductivity$old_equipes);
  1747.             if (count($les_intervenant) > 0)
  1748.                 $users $les_intervenant;
  1749.             else
  1750.                 $users = [];
  1751.         }
  1752.         $users $users ?? [];
  1753.         foreach ($users as $id_user) {
  1754.             $userObj $this->em->getRepository(User::class)->find($id_user);
  1755.             $interventionAffectedUser $this->em->getRepository(InterventionAffectedUsers::class)->findOneBy(["user" => $id_user"intervention" => $intervention->getId()]);
  1756.             if (!$interventionAffectedUser) {
  1757.                 $user = new InterventionAffectedUsers();
  1758.                 $user->setIntervention($intervention);
  1759.                 $user->setUser($userObj);
  1760.                 $this->em->persist($user);
  1761.                 $this->em->flush();
  1762.             }
  1763.             if ($projectUsersIds && !in_array($id_user$projectUsersIds)) {
  1764.                 $projectUser = new ProjectUsers();
  1765.                 $projectUser->setProject($intervention->getProject());
  1766.                 $projectUser->setUser($userObj);
  1767.                 $projectUser->setType("intervenant");
  1768.                 $this->em->persist($projectUser);
  1769.                 $this->em->flush();
  1770.             }
  1771.         }
  1772.         return true;
  1773.     }
  1774.     function setDureeIntervention($intervention)
  1775.     {
  1776.         $originalDate $intervention->getDate();
  1777.         $originalDate $originalDate->format('Y-m-d H:i:s');
  1778.         $newDate date("d-m-Y"strtotime($originalDate));
  1779.         $difference $intervention->GetDureeIntervention();
  1780.         $duree = ($difference->24 60) + ($difference->60) + $difference->i;
  1781.         $users $this->em->getRepository(InterventionAffectedUsers::class)->findBy(["intervention" => $intervention]);
  1782.         $equipes $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(["intervention" => $intervention]);
  1783.         $duree *= count($users) + count($equipes);
  1784.         $intervention->setDuree($duree);
  1785.         $this->em->flush();
  1786.     }
  1787.     public function setProjectAffectedDayByIntervention($intervention$type$old_date null$old_start_hour null$old_end_hour null)
  1788.     {
  1789.         $projectAffectedDay $this->em->getRepository(ProjectAffectedDays::class)->findOneBy(array('project' => $intervention->getProject(), 'date' => $intervention->getDate()));
  1790.         if (!$projectAffectedDay) {
  1791.             $projectAffectedDay = new ProjectAffectedDays();
  1792.             $projectAffectedDay->setProject($intervention->getProject());
  1793.             $projectAffectedDay->setDate($intervention->getDate());
  1794.             $projectAffectedDay->setMatin(0);
  1795.             $projectAffectedDay->setApreMidi(0);
  1796.         }
  1797.         $entreprise_horaires $this->getEntrepriseHoursFromDate($intervention->getDate());
  1798.         $morning_end_hour $entreprise_horaires["morning_end_hour"];
  1799.         $midday_start_hour $entreprise_horaires["midday_start_hour"];
  1800.         $new_morning_value null;
  1801.         $new_midday_value null;
  1802.         if ($type == "delete") {
  1803.             if ($projectAffectedDay->getMatin() >= 1)
  1804.                 $new_morning_value $projectAffectedDay->getMatin() - 1;
  1805.             if ($projectAffectedDay->getApreMidi() >= 1)
  1806.                 $new_midday_value $projectAffectedDay->getApreMidi() - 1;
  1807.         } elseif ($type == "add") {
  1808.             $new_morning_value $projectAffectedDay->getMatin() + 1;
  1809.             $new_midday_value $projectAffectedDay->getApreMidi() + 1;
  1810.         } else {
  1811.             if ($old_date != $intervention->getDate()) {
  1812.                 $oldProjectAffectedDay $this->em->getRepository(ProjectAffectedDays::class)->findOneBy(array('project' => $intervention->getProject(), 'date' => $old_date));
  1813.                 if ($oldProjectAffectedDay) {
  1814.                     if ($old_start_hour $morning_end_hour && $oldProjectAffectedDay->getMatin() > 0)
  1815.                         $oldProjectAffectedDay->setMatin($oldProjectAffectedDay->getMatin() - 1);
  1816.                     if ($old_end_hour $midday_start_hour && $oldProjectAffectedDay->getApreMidi() > 0)
  1817.                         $oldProjectAffectedDay->setApreMidi($oldProjectAffectedDay->getApreMidi() - 1);
  1818.                     $this->em->flush();
  1819.                 }
  1820.             } else {
  1821.                 if ($old_start_hour $morning_end_hour && $projectAffectedDay->getMatin() > 0)
  1822.                     $projectAffectedDay->setMatin($projectAffectedDay->getMatin() - 1);
  1823.                 if ($old_end_hour $midday_start_hour && $projectAffectedDay->getApreMidi() > 0)
  1824.                     $projectAffectedDay->setApreMidi($projectAffectedDay->getApreMidi() - 1);
  1825.                 $this->em->flush();
  1826.             }
  1827.             $new_morning_value $projectAffectedDay->getMatin() + 1;
  1828.             $new_midday_value $projectAffectedDay->getApreMidi() + 1;
  1829.         }
  1830.         if ($new_morning_value && $intervention->getHeureDebut() < $morning_end_hour)
  1831.             $projectAffectedDay->setMatin($new_morning_value);
  1832.         if ($new_midday_value && $intervention->getHeureFin() > $midday_start_hour)
  1833.             $projectAffectedDay->setApreMidi($new_midday_value);
  1834.         $this->em->persist($projectAffectedDay);
  1835.         $this->em->flush();
  1836.         return new Response("done");
  1837.     }
  1838.     function add_project_intervention_task($current_project$object$date$old_productivity$new_productivity$addToCurrent false)
  1839.     {
  1840.         if ($addToCurrent)
  1841.             $projects = [$current_project];
  1842.         else {
  1843.             if ($object instanceof User)
  1844.                 $projects $this->ProjectsRepository->getUsersInterventionByDate($current_project$object$date);
  1845.             else
  1846.                 $projects $this->ProjectsRepository->getEquipesInterventionByDate($current_project$object$date);
  1847.         }
  1848.         foreach ($projects as $project) {
  1849.             $ProjectsAutoPlanifiedTasks = new ProjectsAutoPlanifiedTasks();
  1850.             $ProjectsAutoPlanifiedTasks->setProject($project);
  1851.             $ProjectsAutoPlanifiedTasks->setDate($date);
  1852.             $ProjectsAutoPlanifiedTasks->setOldProductivity($old_productivity);
  1853.             $ProjectsAutoPlanifiedTasks->setNewProductivity($new_productivity);
  1854.             if ($object instanceof User)
  1855.                 $ProjectsAutoPlanifiedTasks->setUser($object);
  1856.             else
  1857.                 $ProjectsAutoPlanifiedTasks->setEquipe($object);
  1858.             $this->em->persist($ProjectsAutoPlanifiedTasks);
  1859.             $this->em->flush();
  1860.         }
  1861.         return true;
  1862.     }
  1863.     public function update_productivity($equipe_id$date$project_id$action$old_productivity)
  1864.     {
  1865.         $date_productivity_data $this->getEquipeProductivityByDate($equipe_id$date);
  1866.         if ($date_productivity_data) {
  1867.             $project $this->em->getRepository(Projects::class)->find($project_id);
  1868.             if ($project->getIsAutoPlanified()) {
  1869.                 $new_productivity 0;
  1870.                 if ($project->getTotalProductivity())
  1871.                     $new_productivity floatval($project->getTotalProductivity());
  1872.                 switch ($action) {
  1873.                     case "add":
  1874.                         $new_productivity += $date_productivity_data["old_productivite"];
  1875.                         break;
  1876.                     case "remove":
  1877.                         $old_productivity $new_productivity -= $old_productivity $new_productivity -= $date_productivity_data["old_productivite"];
  1878.                         break;
  1879.                     default:
  1880.                         break;
  1881.                 }
  1882.                 $project->setTotalProductivity($new_productivity);
  1883.                 $this->em->flush();
  1884.                 $projects $date_productivity_data["projects"];
  1885.                 $other_projects = array();
  1886.                 if ($projects) {
  1887.                     $other_projects array_values(
  1888.                         array_filter(array_column($projects'id'), function ($id) use ($project_id) {
  1889.                             return $id != $project_id;
  1890.                         })
  1891.                     );
  1892.                 }
  1893.                 $result = array(
  1894.                     "equipe_productivity" => $date_productivity_data["old_productivite"],
  1895.                     "new_productivity" => $new_productivity,
  1896.                     "other_projects" => $other_projects
  1897.                 );
  1898.                 if ($old_productivity != $date_productivity_data["old_productivite"]) {
  1899.                     foreach ($other_projects as $other_project_id) {
  1900.                         $other_project $this->em->getRepository(Projects::class)->find($other_project_id);
  1901.                         $equipe $this->em->getRepository(Equipes::class)->find($equipe_id);
  1902.                         $date_object = new \Datetime($date);
  1903.                         if ($action == "remove" && $old_productivity === false)
  1904.                             $task $this->add_project_intervention_task($other_project$equipe$date_object$date_productivity_data["new_productivite"], $date_productivity_data["old_productivite"], true);
  1905.                         else
  1906.                             $task $this->add_project_intervention_task($other_project$equipe$date_object$old_productivity$date_productivity_data["old_productivite"], true);
  1907.                     }
  1908.                 }
  1909.                 return $result;
  1910.             }
  1911.             return "project is not auto planified";
  1912.         }
  1913.     }
  1914.     public function unassign_user_from_intervention($intervention$user_id)
  1915.     {
  1916.         $this->UpdateSuiviTravaux($intervention->getId(), "deleted", ['user_id' => $user_id]);
  1917.         $interventionAffectedUser $this->em->getRepository(InterventionAffectedUsers::class)->findOneBy(['intervention' => $intervention->getId(), 'user' => $user_id]);
  1918.         if ($interventionAffectedUser) {
  1919.             $this->em->remove($interventionAffectedUser);
  1920.             $this->em->flush();
  1921.             $this->update_user_duree_intervention("delete"nullnull$interventionAffectedUser);
  1922.             $this->update_intervention_new_field($intervention);
  1923.             $interventionAffectedUsers $this->em->getRepository(InterventionAffectedUsers::class)->findBy(['intervention' => $intervention->getId()]);
  1924.             $interventionAffectedEquipes $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
  1925.             if (empty($interventionAffectedUsers) && empty($interventionAffectedEquipes)) {
  1926.                 $this->em->getRepository(InterventionsMateriel::class)->remove_InterventionMateriel($intervention);
  1927.                 $this->em->getRepository(InterventionAffectedEquipes::class)->remove_InterventionAffectedEquipes($intervention);
  1928.                 $this->em->getRepository(InterventionAffectedTags::class)->remove_InterventionAffectedTagsRepository($intervention);
  1929.                 $this->em->getRepository(InterventionImages::class)->remove_InterventionImagesRepository($intervention);
  1930.                 $this->InterventionsRepository->remove_interventions($intervention);
  1931.                 $this->UpdateSuiviTravaux($intervention->getId(), "deleted");
  1932.             }
  1933.             $this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
  1934.             return true;
  1935.         }
  1936.         return false;
  1937.     }
  1938.     public function unassign_equipe_from_intervention($intervention$equipe_id)
  1939.     {
  1940.         $interventionAffectedEquipe $this->em->getRepository(InterventionAffectedEquipes::class)->findOneBy(['intervention' => $intervention->getId(), 'equipe' => $equipe_id]);
  1941.         if ($interventionAffectedEquipe) {
  1942.             $old_productivity null;
  1943.             if ($intervention->getProject()->getIsAutoPlanified()) {
  1944.                 $old_productivity $this->getEquipeProductivityByDate($equipe_id$intervention->getDate()->format("Y-m-d"))["old_productivite"];
  1945.             }
  1946.             $this->em->remove($interventionAffectedEquipe);
  1947.             $this->em->flush();
  1948.             $this->update_intervention_new_field($intervention);
  1949.             $interventionAffectedUsers $this->em->getRepository(InterventionAffectedUsers::class)->findBy(['intervention' => $intervention->getId()]);
  1950.             $interventionAffectedEquipes $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
  1951.             if (empty($interventionAffectedUsers) && empty($interventionAffectedEquipes)) {
  1952.                 $this->em->getRepository(InterventionsMateriel::class)->remove_InterventionMateriel($intervention);
  1953.                 $this->em->getRepository(InterventionAffectedEquipes::class)->remove_InterventionAffectedEquipes($intervention);
  1954.                 $this->em->getRepository(InterventionAffectedTags::class)->remove_InterventionAffectedTagsRepository($intervention);
  1955.                 $this->em->getRepository(InterventionImages::class)->remove_InterventionImagesRepository($intervention);
  1956.                 $this->InterventionsRepository->remove_interventions($intervention);
  1957.                 $this->UpdateSuiviTravaux($intervention->getId(), "deleted");
  1958.             }
  1959.             $this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
  1960.             if ($intervention->getProject()->getIsAutoPlanified()) {
  1961.                 $update_productivity_result $this->update_productivity($equipe_id$intervention->getDate()->format("Y-m-d"), $intervention->getProject()->getId(), "remove"$old_productivity);
  1962.                 return new Response(json_encode(["new_productivite" => $update_productivity_result["new_productivity"]]));
  1963.             }
  1964.         }
  1965.         return new Response("done");
  1966.     }
  1967.     function update_intervention_new_field($intervention)
  1968.     {
  1969.         if ($intervention->getClient()->getType() == "professionnel")
  1970.             $intervention->setClientName(trim($intervention->getClient()->getDenomination()));
  1971.         elseif ($intervention->getClient()->getType() == "particulier")
  1972.             $intervention->setClientName($intervention->getClient()->getNom() . ' ' $intervention->getClient()->getPrenom());
  1973.         $sql "
  1974.             SELECT u.nom ,u.prenom FROM `intervention_affected_users` as iau
  1975.             left join user as u on u.id=iau.user_id
  1976.             where iau.intervention_id = " $intervention->getId();
  1977.         $request $this->em->getConnection()->prepare($sql);
  1978.         $request->execute();
  1979.         $affected_users $request->fetchAll();
  1980.         $technicien "";
  1981.         foreach ($affected_users as $key1 => $value1) {
  1982.             $technicien .= $value1["nom"] . " " $value1["prenom"] . "|";
  1983.         }
  1984.         $intervention->setTechniciensNames($technicien);
  1985.         $facturation_intervention "";
  1986.         if ($intervention->getType() == "forfait_contrat_projets")
  1987.             $facturation_intervention .= "Forfait Contrat Projets";
  1988.         elseif ($intervention->getType() == "hors_forfait")
  1989.             $facturation_intervention .= "Hors forfait";
  1990.         elseif ($intervention->getType() == "offert")
  1991.             $facturation_intervention .= "Offert";
  1992.         if ($intervention->getOffre() && $intervention->getType() != "hors_forfait") {
  1993.             if ($intervention->getOffre()->getLibelle() != NULL)
  1994.                 $facturation_intervention .= ": " $intervention->getOffre()->getLibelle();
  1995.         }
  1996.         if ($intervention->getFacture() == "facture")
  1997.             $facturation_intervention .= "- Facturé";
  1998.         elseif ($intervention->getFacture() == "a_facturer")
  1999.             $facturation_intervention .= "- A Facturer";
  2000.         elseif ($intervention->getFacture() == "offre")
  2001.             $facturation_intervention .= "- Offre";
  2002.         $intervention->setFacturationLibelle($facturation_intervention);
  2003.         $this->setDureeIntervention($intervention);
  2004.         $this->em->flush();
  2005.         return $intervention->getId();
  2006.     }
  2007.     private function getUserOrEquipeProductivityByDate($object_productivity$object_id$date$affected$isUser false)
  2008.     {
  2009.         $entreprise_id $this->container->getParameter('entreprise_id');
  2010.         $entreprise $this->em->getRepository(Entreprise::class)->find($entreprise_id);
  2011.         $horaires $entreprise->getHoraires();
  2012.         $nb_half_days 0;
  2013.         $old_productivite 0;
  2014.         $new_productivite 0;
  2015.         foreach ($this->days as $day_name => $day) {
  2016.             if ($horaires[$day_name]["matin"]["closed"] == false)
  2017.                 $nb_half_days++;
  2018.             if ($horaires[$day_name]["apresMidi"]["closed"] == false)
  2019.                 $nb_half_days++;
  2020.         }
  2021.         if ($nb_half_days !== 0) {
  2022.             $productivite $object_productivity $nb_half_days;
  2023.             $projects $this->ProjectsRepository->getProductsForUserOrEquipeByDate($object_id$date$isUser);
  2024.             $checkIfDefaultUser false;
  2025.             if ($isUser)
  2026.                 $checkIfDefaultUser $entreprise->getDefaultJointeur()->getId() == $object_id;
  2027.             if (!$affected) {
  2028.                 if ($checkIfDefaultUser) {
  2029.                     $old_productivite $productivite;
  2030.                     $new_productivite $productivite;
  2031.                 } elseif (count($projects) >= 1) {
  2032.                     $old_productivite $productivite / (count($projects));
  2033.                     $new_productivite $productivite / (count($projects) + 1);
  2034.                 } else {
  2035.                     $new_productivite $productivite;
  2036.                 }
  2037.             } else {
  2038.                 if ($checkIfDefaultUser) {
  2039.                     $old_productivite $productivite;
  2040.                     $new_productivite $productivite;
  2041.                 } elseif (count($projects) > 1) {
  2042.                     $old_productivite $productivite / (count($projects));
  2043.                     $new_productivite $productivite / (count($projects) - 1);
  2044.                 } else {
  2045.                     $old_productivite $productivite;
  2046.                 }
  2047.             }
  2048.             return array(
  2049.                 "old_productivite" => $old_productivite,
  2050.                 "new_productivite" => $new_productivite,
  2051.                 "projects" => $projects
  2052.             );
  2053.         }
  2054.         return;
  2055.     }
  2056.     public function getEquipeProductivityByDate($equipe_id$date$affected false)
  2057.     {
  2058.         $equipe $this->em->getRepository(Equipes::class)->find($equipe_id);
  2059.         if ($equipe->getProductivite()) {
  2060.             return $this->getUserOrEquipeProductivityByDate($equipe->getProductivite(), $equipe_id$date$affected);
  2061.         }
  2062.         return;
  2063.     }
  2064.     function CalculeMargeProject($Project$is_frais false$is_main_oeuvre false$is_marge false$devis_value null)
  2065.     {
  2066.         $taux_frais $this->calc_taux_frais($Project->getId());
  2067.         $total_main_oeuvre $this->total_main_oeuvre($Project->getId());
  2068.         if ($devis_value) {
  2069.             $marge $devis_value $total_main_oeuvre $taux_frais;
  2070.             $Project->setDevis($devis_value);
  2071.         } else
  2072.             $marge $Project->getDevis() - $total_main_oeuvre $taux_frais;
  2073.         if ($is_frais)
  2074.             $Project->setFrais($taux_frais);
  2075.         if ($is_main_oeuvre)
  2076.             $Project->setMainOeuvre($total_main_oeuvre);
  2077.         $Project->setMarge($marge);
  2078.         $this->em->persist($Project);
  2079.         $this->em->flush();
  2080.         if ($is_marge)
  2081.             return $marge;
  2082.         return $Project;
  2083.     }
  2084.     function UpdateStatProject($Project$Action ""$Old_year null)
  2085.     {
  2086.         switch ($Action) {
  2087.             case "FACTURATION":
  2088.                 $SommeFactureAndSommeRegle $this->em->getRepository(ProjectFacturation::class)->SommeFactureAndSommeRegle($Project);
  2089.                 $Project->setSommeRegle($SommeFactureAndSommeRegle[0]["Regle"]);
  2090.                 $Project->setSommeFacture($SommeFactureAndSommeRegle[0]["Facture"]);
  2091.                 $Project->setNonRegle($SommeFactureAndSommeRegle[0]["Facture"] - $SommeFactureAndSommeRegle[0]["Regle"]);
  2092.                 break;
  2093.             case "FRAIS":
  2094.                 $Project $this->CalculeMargeProject($Projecttrue);
  2095.                 break;
  2096.             case "MainOeuvre":
  2097.                 $Project $this->CalculeMargeProject($Projectfalsetrue);
  2098.                 break;
  2099.         }
  2100.         $this->em->persist($Project);
  2101.         $this->em->flush();
  2102.         $this->getTotalInterventionProjet($Project->getId(), true);
  2103.     }
  2104.     public function getJointeurProductivityByDate($user_id$date$affected false)
  2105.     {
  2106.         $user $this->em->getRepository(User::class)->find($user_id);
  2107.         if ($user->getProductiviteM2()) {
  2108.             return $this->getUserOrEquipeProductivityByDate($user->getProductiviteM2(), $user_id$date$affectedtrue);
  2109.         }
  2110.         return;
  2111.     }
  2112.     public function getPrefixUser($user)
  2113.     {
  2114.         $prefix_user "";
  2115.         if ($user->getTache() && $user->getTache() === "Jointeur")
  2116.             $prefix_user "Jointeur ";
  2117.         return $prefix_user;
  2118.     }
  2119.     public function getPageLink($list$vue_graphique$pageType)
  2120.     {
  2121.         $user $this->tokenStorage->getToken()->getUser();
  2122.         $request $this->requestStack->getCurrentRequest();
  2123.         $session $request->getSession();
  2124.         $urlInSession $session->get('page-type', []);
  2125.         if (in_array("ROLE_vue_details"$user->getRoles()) && !in_array("ROLE_vue_graphique"$user->getRoles()))
  2126.             return $list;
  2127.         else if (!in_array("ROLE_vue_details"$user->getRoles()) && in_array("ROLE_vue_graphique"$user->getRoles())) {
  2128.             if ($pageType == "Interventions" && $urlInSession && array_key_exists("InterventionsType"$urlInSession))
  2129.                 return $vue_graphique "?type=" $urlInSession["InterventionsType"];
  2130.             return $vue_graphique;
  2131.         } else {
  2132.             if ($urlInSession && array_key_exists($pageType$urlInSession) && $urlInSession[$pageType] == "graphique") {
  2133.                 if ($pageType == "Interventions" && $urlInSession && array_key_exists("InterventionsType"$urlInSession))
  2134.                     return $vue_graphique "?type=" $urlInSession["InterventionsType"];
  2135.                 else
  2136.                     return $vue_graphique;
  2137.             }
  2138.             return $list;
  2139.         }
  2140.     }
  2141.     public function get_type_and_size_file($path$id)
  2142.     {
  2143.         $info_documents = array();
  2144.         $fileSize 0;
  2145.         $imageExtensions = ['jpg''jpeg''png''gif'];
  2146.         $urlParts parse_url($path);
  2147.         if (isset($urlParts['path']))
  2148.             $path $urlParts['path'];
  2149.         $pathWithoutFirstSlash ltrim($path'/');
  2150.         if (file_exists($pathWithoutFirstSlash))
  2151.             $fileSize filesize($pathWithoutFirstSlash);
  2152.         $fileExtension $this->get_extension_file($path);
  2153.         $info_documents[$id] = [
  2154.             'type' => in_array(strtolower($fileExtension), $imageExtensions) ? 'image' 'document',
  2155.             'size' => $fileSize
  2156.         ];
  2157.         return $info_documents;
  2158.     }
  2159.     function setProjectSuiviTravaux($project_id$item_id$date$heure_reel$projectSuiviTravaux_id null$isEquipe false)
  2160.     {
  2161.         $project $this->em->getRepository(Projects::class)->find($project_id);
  2162.         $intervenant null;
  2163.         if (!$isEquipe)
  2164.             $intervenant $this->em->getRepository(User::class)->find($item_id);
  2165.         else
  2166.             $equipe $this->em->getRepository(Equipes::class)->find($item_id);
  2167.         if ($projectSuiviTravaux_id) {
  2168.             $projectSuiviTravaux $this->em->getRepository(ProjectSuiviTravaux::class)->find($projectSuiviTravaux_id);
  2169.             if ($projectSuiviTravaux->getHeureReel() != $heure_reel) {
  2170.                 $taux_minute $projectSuiviTravaux->getTauHoraire() / 60;
  2171.                 $taux_minute_project $projectSuiviTravaux->getUserTauHoriare() / 60;
  2172.                 $projectSuiviTravaux->setHeureReel($heure_reel);
  2173.                 $projectSuiviTravaux->setHeuresUser($heure_reel);
  2174.                 $projectSuiviTravaux->setHeuresClient($heure_reel);
  2175.                 $projectSuiviTravaux->setSommeUser($heure_reel $taux_minute);
  2176.                 $projectSuiviTravaux->setSommeClient($heure_reel $taux_minute_project);
  2177.             }
  2178.         } else {
  2179.             $projectSuiviTravaux = new ProjectSuiviTravaux();
  2180.             $projectSuiviTravaux->setProject($project);
  2181.             $projectSuiviTravaux->setUser($intervenant);
  2182.             $projectSuiviTravaux->setDate($date);
  2183.             if ($isEquipe) {
  2184.                 $projectSuiviTravaux->setEquipe($equipe);
  2185.                 if ($this->em->getRepository(Equipes::class)->getTauxHoraire($equipe->getId())) {
  2186.                     $taux $this->em->getRepository(Equipes::class)->getTauxHoraire($equipe->getId())['taux_horaire'] ?? 0;
  2187.                     $projectSuiviTravaux->setTauHoraire($taux);
  2188.                     $taux_minute $taux 60;
  2189.                 } else {
  2190.                     $projectSuiviTravaux->setTauHoraire(0);
  2191.                     $taux_minute 0;
  2192.                 }
  2193.             } else {
  2194.                 $projectSuiviTravaux->setUser($intervenant);
  2195.                 if ($intervenant->getTauxHoraire()) {
  2196.                     $projectSuiviTravaux->setTauHoraire($intervenant->getTauxHoraire());
  2197.                     $taux_minute $intervenant->getTauxHoraire() / 60;
  2198.                 } else {
  2199.                     $projectSuiviTravaux->setTauHoraire(0);
  2200.                     $taux_minute 0;
  2201.                 }
  2202.             }
  2203.             if ($project->getTauxHoraire()) {
  2204.                 $projectSuiviTravaux->setUserTauHoriare($project->getTauxHoraire());
  2205.                 $taux_minute_project $project->getTauxHoraire() / 60;
  2206.             } else {
  2207.                 $projectSuiviTravaux->setUserTauHoriare(0);
  2208.                 $taux_minute_project 0;
  2209.             }
  2210.             $projectSuiviTravaux->setHeuresUser($heure_reel);
  2211.             $projectSuiviTravaux->setHeureReel($heure_reel);
  2212.             $projectSuiviTravaux->setHeuresClient($heure_reel);
  2213.             $projectSuiviTravaux->setSommeUser($heure_reel $taux_minute);
  2214.             $projectSuiviTravaux->setSommeClient($heure_reel $taux_minute_project);
  2215.             $this->em->persist($projectSuiviTravaux);
  2216.         }
  2217.         $this->em->flush();
  2218.     }
  2219.     public function heures_reels($data$type)
  2220.     {
  2221.         $heures_reels = [];
  2222.         $items = isset($data[$type]) ? $data[$type] : (isset($data['users']) ? $data['users'] : $data['equipes']);
  2223.         $interventions = isset($data["equipes_interventions"]) ? $data["equipes_interventions"] : (isset($data["interventions"]) ? $data["interventions"] : []);
  2224.         foreach ($items as $item) {
  2225.             $id_item $item['id'];
  2226.             $minutes 0;
  2227.             if (isset($interventions[$id_item])) {
  2228.                 foreach ($interventions[$id_item] as $intervention) {
  2229.                     $array_times explode(":"$intervention["duree_intervention"]);
  2230.                     $minutes += ($array_times[0] * 60 $array_times[1]);
  2231.                 }
  2232.                 $heures_reels[$id_item] = $minutes;
  2233.             }
  2234.         }
  2235.         return $heures_reels;
  2236.     }
  2237.     public function addSuiviTravauxProject($project_id$item$intervention$isEquipe)
  2238.     {
  2239.         $projectSuiviTravaux $this->em->getRepository(ProjectSuiviTravaux::class)->findByProjectAndUserAndDate($project_id$item->getId(), $intervention->getDate()->format("Y-m-d"));
  2240.         $projectSuiviTravaux_id $projectSuiviTravaux $projectSuiviTravaux[0]->getId() : null;
  2241.         $dataIntervention = clone $intervention->getDate();
  2242.         $data $this->getProjectIntervenantsInterventions($project_id$dataIntervention);
  2243.         $heures_reels $this->heures_reels($data$isEquipe "equipes" "users");
  2244.         $heures_reel = isset($heures_reels[$item->getId()]) ? $heures_reels[$item->getId()] : 0;
  2245.         $this->setProjectSuiviTravaux($project_id$item->getId(), $intervention->getDate(), $heures_reel$projectSuiviTravaux_id$isEquipe);
  2246.     }
  2247.     public function UpdateSuiviTravaux($intervention_id$action$params = [])
  2248.     {
  2249.         $intervention $this->em->getRepository(Interventions::class)->find($intervention_id);
  2250.         if (!empty($intervention)) {
  2251.             switch ($action) {
  2252.                 case "deleted":
  2253.                     $filter = [
  2254.                         'project' => $intervention->getProject(),
  2255.                         'date' => $intervention->getDate()
  2256.                     ];
  2257.                     if (isset($params['user_id']))
  2258.                         $filter['user'] = $params['user_id'];
  2259.                     $ProjectSuiviTravauxList $this->em->getRepository(ProjectSuiviTravaux::class)->findby($filter);
  2260.                     foreach ($ProjectSuiviTravauxList as $ProjectSuiviTravaux) {
  2261.                         if ($intervention->getDuree() >= $ProjectSuiviTravaux->getHeureReel())
  2262.                             $this->em->remove($ProjectSuiviTravaux);
  2263.                         else {
  2264.                             $newDuree $ProjectSuiviTravaux->getHeureReel() - $intervention->getDuree();
  2265.                             $oldDuree $ProjectSuiviTravaux->getHeureReel();
  2266.                             $ProjectSuiviTravaux->setHeureReel($newDuree);
  2267.                             $ProjectSuiviTravaux->setHeuresUser($ProjectSuiviTravaux->getHeuresUser() - $intervention->getDuree());
  2268.                             $ProjectSuiviTravaux->setHeuresClient($ProjectSuiviTravaux->getHeuresClient() - $intervention->getDuree());
  2269.                             $ProjectSuiviTravaux->setSommeUser($this->getNewsPrice($newDuree$oldDuree$ProjectSuiviTravaux->getSommeUser()));
  2270.                             $ProjectSuiviTravaux->setSommeClient($this->getNewsPrice($newDuree$oldDuree$ProjectSuiviTravaux->getSommeUser()));
  2271.                         }
  2272.                         $this->em->flush();
  2273.                     }
  2274.                     break;
  2275.                 default:
  2276.                     break;
  2277.             }
  2278.             if (!empty($intervention->getProject()))
  2279.                 $this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
  2280.         }
  2281.         return 'done';
  2282.     }
  2283.     function getNewsPrice($newDuree$oldDuree$oldPrice)
  2284.     {
  2285.         $newPrice round((($oldPrice $oldDuree) * $newDuree), 2);
  2286.         return $newPrice;
  2287.     }
  2288.     function UpdateUserSuiviTravaux($user_id)
  2289.     {
  2290.         $user $this->em->getRepository(User::class)->find($user_id);
  2291.         $ProjectSuiviTravauxList $this->em->getRepository(ProjectSuiviTravaux::class)->findby(['user' => $user_id]);
  2292.         foreach ($ProjectSuiviTravauxList as $ProjectSuiviTravaux) {
  2293.             $ProjectSuiviTravaux->setTauHoraire($user->getTauxHoraire());
  2294.             $ProjectSuiviTravaux->setSommeUser(round($user->getTauxHoraire() * ($ProjectSuiviTravaux->getHeuresUser() / 60)), 2);
  2295.             $this->em->flush();
  2296.             $this->UpdateStatProject($ProjectSuiviTravaux->getProject(), "MainOeuvre");
  2297.         }
  2298.         return 'done';
  2299.     }
  2300.     public function getEntrepriseClosedDays()
  2301.     {
  2302.         $entreprise_id $this->container->getParameter('entreprise_id');
  2303.         $entreprise $this->em->getRepository(Entreprise::class)->find($entreprise_id);
  2304.         $horaires $entreprise->getHoraires();
  2305.         $d 1;
  2306.         $closed_days = array();
  2307.         foreach ($horaires as $day) {
  2308.             if ($day["matin"]["closed"] == true && $day["apresMidi"]["closed"] == true)
  2309.                 $closed_days[] = $d 7;
  2310.             $d++;
  2311.         }
  2312.         return $closed_days;
  2313.     }
  2314. }