<?php
namespace App\Service;
use App\Entity\User;
use App\Entity\Entreprise;
use App\Entity\ProjectFacturation;
use App\Entity\Site;
use App\Entity\Tikets;
use App\Entity\ProjectFrais;
use App\Entity\TicketReseaux;
use App\Entity\Interventions;
use App\Entity\Projects;
use App\Entity\ProjectUsers;
use App\Entity\ProjectEquipe;
use App\Entity\Equipes;
use App\Entity\Notifications;
use App\Entity\InterventionsMateriel;
use App\Entity\InterventionAffectedTags;
use App\Entity\InterventionImages;
use App\Entity\InterventionAffectedUsers;
use App\Entity\InterventionAffectedEquipes;
use App\Entity\ProjectSuiviTravaux;
use App\Entity\ProjectAffectedDays;
use App\Entity\ProjectsAutoPlanifiedTasks;
use App\Repository\SiteRepository;
use App\Repository\InterventionsRepository;
use App\Repository\ProjectsRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Twig\Environment;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Validator\Constraints\DateTime;
use Symfony\Component\Routing\RouterInterface;
use \Ovh\Api;
class ServiceTeaminfo
{
private $SiteRepository;
private $em;
private $container;
private $twig;
protected $requestStack;
private $tokenStorage;
private $InterventionsRepository;
private $ProjectsRepository;
public $currentView;
public $currentProjectVue;
public $currentTicketVue;
public $currentCongesVue;
public $currentProjectYearVue;
public const DEFAULT_LIMIT = 50;
public const DEFAULT_LIMIT_PROJECTS = 50;
public const INTERVENTION_FILTER = "intervention_filter";
public const TICKET_FILTER = "ticket_filter";
public const PROJECT_FILTER = "project_filter";
public const PROJECT_PLANIFICATEUR_FILTER = "project_planificateur_filter";
public const PROJECT_INTERVENANT_FILTER = "project_intervenant_filter";
public const CONGE_FILTER = "conge_filter";
public $widthsAndDefaultView;
public $projectVue;
public $ticketVue;
public $days;
public $image_extensions;
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");
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");
public const MORNING_START = "08:00";
public const MORNING_END = "13:00";
public const MIDDAY_START = "14:00";
public const MIDDAY_END = "18:00";
public const MONTHS = array(
'1' => array('key' => 'Jan', 'libelle' => 'Janvier'),
'2' => array('key' => 'Feb', 'libelle' => 'Février'),
'3' => array('key' => 'Mar', 'libelle' => 'Mars'),
'4' => array('key' => 'Apr', 'libelle' => 'Avril'),
'5' => array('key' => 'May', 'libelle' => 'Mai'),
'6' => array('key' => 'Jun', 'libelle' => 'Juin'),
'7' => array('key' => 'Jul', 'libelle' => 'Juillet'),
'8' => array('key' => 'Aug', 'libelle' => 'Aout'),
'9' => array('key' => 'Sep', 'libelle' => 'Septembre'),
'10' => array('key' => 'Oct', 'libelle' => 'Octobre'),
'11' => array('key' => 'Nov', 'libelle' => 'Novembre'),
'12' => array('key' => 'Dec', 'libelle' => 'Décembre')
);
private $router;
public function __construct(?RouterInterface $router, ?SiteRepository $SiteRepository, ?EntityManagerInterface $em, ?ContainerInterface $container, ?Environment $twig, ?RequestStack $requestStack, ?TokenStorageInterface $tokenStorage, ?InterventionsRepository $InterventionsRepository, ?ProjectsRepository $ProjectsRepository)
{
$this->SiteRepository = $SiteRepository;
$this->InterventionsRepository = $InterventionsRepository;
$this->ProjectsRepository = $ProjectsRepository;
$this->em = $em;
$this->container = $container;
$this->twig = $twig;
$this->requestStack = $requestStack;
$this->tokenStorage = $tokenStorage;
$this->router = $router;
$this->image_extensions = explode(",", $container->getParameter('extension_accepte'));
$this->widthsAndDefaultView = array(
"etat" => array("width" => "60", "default" => 1, "libelle" => 'Etat'),
"client" => array("width" => "150", "default" => 1, "libelle" => 'Client'),
"type" => array("width" => "150", "default" => 1, "libelle" => 'Type intervention'),
"description" => array("width" => "250", "default" => 1, "libelle" => 'Description'),
"date" => array("width" => "90", "default" => 1, "libelle" => 'Date'),
"heure_debut" => array("width" => "135", "default" => 1, "libelle" => 'Heure de début'),
"facturation" => array("width" => "160", "default" => 1, "libelle" => 'Facturation'),
"technicien" => array("width" => "150", "default" => 1, "libelle" => 'Technicien'),
"adresse" => array("width" => "210", "default" => 0, "libelle" => 'Adresse de l\' intervention'),
"tags" => array("width" => "300", "default" => 0, "libelle" => 'Tags'),
"duree" => array("width" => "90", "default" => 0, "libelle" => 'Durée'),
"nb_documents" => array("width" => "171", "default" => 0, "libelle" => 'Nombre de document'),
"tickets_reseaux" => array("width" => "160", "default" => 0, "libelle" => 'Ticket réseau'),
"site" => array("width" => "180", "default" => 0, "libelle" => 'Site'),
"interlocutor" => array("width" => "150", "default" => 0, "libelle" => 'Référant'),
);
$this->projectVue = array(
"libelle" => array("width" => "300", "default" => 1, "libelle" => 'Libelle'),
"date_debut" => array("width" => "90", "default" => 1, "libelle" => 'Date de début'),
"date_fin" => array("width" => "90", "default" => 1, "libelle" => 'Date de fin'),
"etat" => array("width" => "120", "default" => 1, "libelle" => 'Etat'),
"client" => array("width" => "150", "default" => 0, "libelle" => 'Client'),
"nb_heures_estimer" => array("width" => "90", "default" => 0, "libelle" => 'Nombre d\'heures estimé'),
"nb_heure_planifier" => array("width" => "90", "default" => 0, "libelle" => 'Nombre d\'heures plannifiées'),
"avancement" => array("width" => "110", "default" => 0, "libelle" => 'Avancement'),
"planificateurs" => array("width" => "150", "default" => 0, "libelle" => 'Planificateurs'),
"intervenants" => array("width" => "200", "default" => 0, "libelle" => 'Intervenants'),
"materiels" => array("width" => "150", "default" => 0, "libelle" => 'Matériels'),
"interlocutor" => array("width" => "150", "default" => 0, "libelle" => 'Référant'),
);
$this->ticketVue = array(
"client_ticket" => array("width" => "150", "default" => 1, "libelle" => 'Client'),
"date" => array("width" => "90", "default" => 1, "libelle" => 'Date'),
"statut" => array("width" => "90", "default" => 1, "libelle" => 'Statut'),
"description" => array("width" => "250", "default" => 1, "libelle" => 'Description'),
"criticite" => array("width" => "90", "default" => 1, "libelle" => 'Criticité'),
"site" => array("width" => "150", "default" => 1, "libelle" => 'Site'),
"type_ticket" => array("width" => "150", "default" => 0, "libelle" => 'Type de ticket'),
"tags" => array("width" => "150", "default" => 0, "libelle" => 'Tags'),
"saisie_par" => array("width" => "150", "default" => 0, "libelle" => 'Saisie par'),
"ticket_affecte_a" => array("width" => "150", "default" => 0, "libelle" => 'Ticket affecte a'),
"ticket_supervise_par" => array("width" => "150", "default" => 0, "libelle" => 'Ticket supervisé par'),
"date_prev_real" => array("width" => "150", "default" => 0, "libelle" => 'Date prévisionnelle de réalisation'),
"date_ech" => array("width" => "150", "default" => 0, "libelle" => 'Date d\'échéance'),
);
$this->projectVueUserClient = array(
"id" => 0,
"libelle" => 1,
"date_debut" => 1,
"date_fin" => 1,
"etat" => 0,
"client" => 0,
"nb_heures_estimer" => 1,
"nb_heure_planifier" => 0,
"avancement" => 0,
"planificateurs" => 0,
"intervenants" => 0,
"materiels" => 0,
"interlocutor" => 0,
);
$this->projectYearVue = array(
"intervenant" => array("default" => 1, "libelle" => 'Intervenant'),
"project" => array("default" => 0, "libelle" => 'Projets'),
"client" => array("default" => 0, "libelle" => 'Clients'),
"devis" => array("default" => 0, "libelle" => 'Devis'),
"manager" => array("default" => 0, "libelle" => 'Maîtrise d\'oeuvre'),
"fournisseur" => array("default" => 0, "libelle" => 'Fournisseurs'),
"lot" => array("default" => 0, "libelle" => 'Lots'),
"agrement" => array("default" => 0, "libelle" => 'Contrat d\'agrément '),
"sous-traitant" => array("default" => 0, "libelle" => 'Sous-traitant'),
"fusion_intervenant" => array("default" => 0, "libelle" => 'Fusion des intervenants'),
);
$this->days = array(
'lundi' => 'Lundi',
'mardi' => 'Mardi',
'mercredi' => 'Mercredi',
'jeudi' => 'Jeudi',
'vendredi' => 'Vendredi',
'samedi' => 'Samedi',
'dimanche' => 'Dimanche'
);
if ($this->requestStack) {
if ($this->requestStack->getCurrentRequest()) {
$cookies = $this->requestStack->getCurrentRequest()->cookies;
if ($cookies->has('current_intervention_vue')) {
$current_vue = unserialize($cookies->get('current_intervention_vue'));
if ($current_vue)
$this->currentView = array_keys($current_vue, "1");
}
if ($cookies->has('current_project_vue')) {
$current_project_vue = unserialize($cookies->get('current_project_vue'));
if ($current_project_vue)
$this->currentProjectVue = array_keys($current_project_vue, "1");
}
if ($cookies->has('current_ticket_vue')) {
$current_ticket_vue = unserialize($cookies->get('current_ticket_vue'));
if ($current_ticket_vue)
$this->currentTicketVue = array_keys($current_ticket_vue, "1");
}
if ($cookies->has('current_project_year_vue')) {
$current_project_year_vue = (array) json_decode($cookies->get('current_project_year_vue'));
if ($current_project_year_vue)
$this->currentProjectYearVue = array_keys($current_project_year_vue, "1");
}
}
}
}
public function GetSites()
{
$ids_sites = 0;
$request = $this->requestStack->getCurrentRequest();
$cookies = $request->cookies;
$sites = $cookies->get('site');
if ($sites)
$ids_sites = explode(',', $sites);
return $ids_sites;
}
public function IsJournalProjet()
{
$entreprise = $this->em->getRepository('App\Entity\Entreprise')->find($this->container->getParameter('entreprise_id'));
return $entreprise->getIsJournalProjet();
}
public function generatePdf($content, $Dossier, $nom)
{
$request = $this->requestStack->getCurrentRequest();
$base_path = $request->server->get('DOCUMENT_ROOT') . $request->getBasePath();
$base_url = $request->getSchemeAndHttpHost() . $request->getBasePath();
$server_path = "/" . $Dossier . "/" . date("Y") . '/';
if (!file_exists($base_path . $server_path))
mkdir($base_path . $server_path, 0777);
$server_path .= date("m") . '/';
if (!file_exists($base_path . $server_path))
mkdir($base_path . $server_path, 0777);
$server_path .= date("d") . '/';
if (!file_exists($base_path . $server_path))
mkdir($base_path . $server_path, 0777);
$file_name = $nom . uniqid() . ".pdf";
$url = $base_url . $server_path . $file_name;
$pdf_file = $this->generate_pdf($content, array(), $file_name, $base_path . $server_path);
return $url;
}
public function formatPrice($prix, $currency = true)
{
$price_format = number_format($prix, 2, ",", " ");
if ($currency == true)
$price_format .= " €";
return $price_format;
}
function set_user_duree($User)
{
$count_jour = $this->InterventionsRepository->DureeInterventionByUser($User->getId(), true);
$Duree = $this->InterventionsRepository->DureeInterventionByUser($User->getId());
if ($count_jour)
$User->setTotalInterventionsJours($count_jour);
else
$User->setTotalInterventionsJours(0);
if ($Duree)
$User->setTotalInterventionsReel($Duree);
else
$User->setTotalInterventionsReel(0);
$this->em->persist($User);
$this->em->flush();
}
public function listeSites()
{
$entreprise_id = $this->container->getParameter('entreprise_id');
$sites = $this->em->getRepository(Site::class)->findBy(['entreprise' => $entreprise_id, 'deleted' => null]);
$entreprise = $this->em->getRepository(Entreprise::class)->find($entreprise_id);
$id_client_interne = $entreprise->getCompteInterne()->getId();
$user_connected = $this->tokenStorage->getToken()->getUser();
$current_site_id = $user_connected->getSiteRatachement()->getId();
$request = $this->requestStack->getCurrentRequest();
$cookies = $request->cookies;
$sites_ids = array();
if (!$cookies->has('site')) {
$response = new Response();
$cookie = new Cookie('site', $current_site_id, time() + (365 * 24 * 60 * 60), '/', null, false, false);
$response->headers->setCookie($cookie);
$response->sendHeaders();
array_push($sites_ids, $current_site_id);
} else {
$sites_ids = $this->GetSites();
}
$has_atelier = 0;
foreach ($sites as $site) {
if (in_array($site->getId(), $sites_ids)) {
if ($site->getHasAtelier() != 0)
$has_atelier = 1;
}
}
$html = $this->twig->render('sites/select_site.html.twig', [
'sites' => $sites,
'sites_ids' => $sites_ids,
'current_site_id' => $current_site_id,
'current_site_atelier' => $has_atelier,
'id_client_interne' => $id_client_interne
]);
return $html;
}
public function FormattedDuration($duree_minute, $displayDays = true)
{
if ($duree_minute && $duree_minute !== "" && $duree_minute != 0) {
$nb_heure = 0;
$jours = 0;
$signe_negative = "";
if ($duree_minute < 0) {
$duree_minute = -$duree_minute;
$signe_negative = "-";
}
if ($duree_minute >= 60) {
$nb_heure = (int) ($duree_minute / 60);
$duree_minute = $duree_minute % 60;
}
if ($displayDays) {
$jours = (int) ($nb_heure / 24);
$nb_heure = $nb_heure % 24;
}
if ($nb_heure == 0)
$nb_heure = '00';
if ($nb_heure < 10 && $nb_heure > 0)
$nb_heure = '0' . strval($nb_heure);
$duree_minute = round($duree_minute, 0);
if ($duree_minute < 10)
$duree_minute = '0' . strval($duree_minute);
if ($displayDays && $jours > 0)
return $signe_negative . ' ' . $jours . ' j ' . $nb_heure . ' h ' . $duree_minute . ' min';
else
return $signe_negative . ' ' . $nb_heure . ' h ' . $duree_minute . ' min';
}
return '00:00';
}
public function get_indicateurs()
{
$request = $this->requestStack->getCurrentRequest();
$cookies = $request->cookies;
if ($cookies->has('indicateurs')) {
$data = unserialize($cookies->get('indicateurs'), ["allowed_classes" => false]);
} else {
$user = $this->tokenStorage->getToken()->getUser();
$nb_interventions_non_facture = 0;
$nb_interventions_a_venir = 0;
$nb_expired_licence = 0;
$nb_ticket_reseau = 0;
$nb_mes_ticket_reseau = 0;
$nb_tickets = 0;
if ($user != "anon.") {
$id = $user->getID();
if (array_search("ROLE_admin", $user->getRoles()) !== false) {
$nb_interventions_non_facture = $this->getNbInterventionsNonFacture();
$nb_mes_interventions_non_facture = $this->getNbInterventionsNonFacture($id);
$nb_ticket_reseau = $this->getNbTicketsReseau();
$nb_mes_ticket_reseau = $this->getNbTicketsReseau($id);
$nb_interventions_a_venir = $this->getNbInterventionsAVenir();
$nb_mes_interventions_a_venir = $this->getNbInterventionsAVenir($id);
$nb_expired_licence = $this->getNbExpiredLicence();
$resultNbTickets = $this->getNbticketNonTermineEtBloque();
$resultNbTickets_atelier = $this->getNbticketAtelierNonTermineEtBloque();
} else {
$nb_mes_interventions_non_facture = $this->getNbInterventionsNonFacture($id);
$nb_mes_ticket_reseau = $this->getNbTicketsReseau($id);
$nb_mes_interventions_a_venir = $this->getNbInterventionsAVenir($id);
$nb_expired_licence = $this->getNbExpiredLicence($id);
$resultNbTickets = $this->getNbticketNonTermineEtBloque($id);
$resultNbTickets_atelier = $this->getNbticketAtelierNonTermineEtBloque($id);
}
}
$nb_tickets = $nb_ticket_reseau + $resultNbTickets['nb_tickets_non_termine'];
$data = array(
'nb_interventions_non_facture' => $nb_interventions_non_facture,
'nb_mes_interventions_non_facture' => $nb_mes_interventions_non_facture,
'nb_interventions_a_venir' => $nb_interventions_a_venir,
'nb_mes_interventions_a_venir' => $nb_mes_interventions_a_venir,
'nb_expired_licence' => $nb_expired_licence,
'nb_tickets_non_termine' => $resultNbTickets_atelier['nb_tickets_non_termine'],
'nb_tickets_bloque' => $resultNbTickets_atelier['nb_tickets_bloque'],
'nb_mes_ticket_reseau' => $nb_mes_ticket_reseau,
'nb_ticket_reseau' => $nb_ticket_reseau,
'nb_tickets' => $nb_tickets
);
$response = new Response();
$cookie = new Cookie('indicateurs', serialize($data), time() + (365 * 24 * 60 * 60), '/', null, false, false);
$response->headers->setCookie($cookie);
$response->sendHeaders();
}
$html = $this->twig->render('user_indicateurs.html.twig', $data);
if ($request->get("is_ajax_call"))
return new Response($html);
return $html;
}
public function getNbInterventionsNonFacture($id = null)
{
$sql = "
SELECT count(distinct(i.id)) as nb_interventions
FROM interventions as i
INNER JOIN intervention_affected_users as u ON i.id = u.intervention_id
WHERE i.facture= 'a_facturer' AND i.deleted is null
";
if ($id)
$sql .= " AND u.user_id = '" . addslashes($id) . "'";
$request = $this->em->getConnection()->prepare($sql);
$request->execute();
$result = $request->fetchAll();
return $result[0]["nb_interventions"];
}
public function getNbTicketsReseau($id = null)
{
$sql = "
SELECT count(*) as nb_ticket_reseau
FROM ticket_reseaux
WHERE statut BETWEEN 2 and 3
and deleted IS NULL
and archived IS NULL
";
if ($id)
$sql .= " AND user_ticket_affected_id='" . addslashes($id) . "'";
$request = $this->em->getConnection()->prepare($sql);
$request->execute();
$result = $request->fetchAll();
return $result[0]["nb_ticket_reseau"];
}
public function getNbInterventionsAVenir($id = null)
{
$now = strtotime(date("Y-m-d H:i:s"));
$date_60 = date("Y-m-d H:i:s", strtotime('+ 60 day', $now));
$sql = "
SELECT count(distinct(i.id)) as interventions_a_venir
FROM `interventions` as i
";
if ($id) {
$sql .= "
INNER JOIN intervention_affected_users as u ON i.id = u.intervention_id
WHERE i.date > '" . addslashes($now) . "' AND i.deleted is null AND u.user_id = '" . addslashes($id) . "'
";
} else {
$sql .= " WHERE i.date > '" . addslashes($now) . "' AND i.deleted is null";
}
$request = $this->em->getConnection()->prepare($sql);
$request->execute();
$result = $request->fetchAll();
return $result[0]["interventions_a_venir"];
}
public function getNbExpiredLicence($id = null)
{
$now = strtotime(date("Y-m-d H:i:s"));
$date_60 = date("Y-m-d H:i:s", strtotime('+ 60 day', $now));
$sql = '
SELECT count(*) as expired_licence
FROM `assignedlicence`
WHERE date < "' . addslashes($date_60) . '" and archived IS NULL and deleted IS NULL
';
if ($id)
$sql .= ' AND user_id = "' . addslashes($id) . '"';
$request = $this->em->getConnection()->prepare($sql);
$request->execute();
$result = $request->fetchAll();
return $result[0]["expired_licence"];
}
public function getNbticketNonTermineEtBloque($id = null)
{
$nb_tickets_non_termine = 0;
$nb_tickets_bloque = 0;
$conditions = array(
'archived' => null,
'deleted' => null,
'statut' => 5
);
if ($id)
$conditions['user_ticket_affected'] = $id;
$tickets = $this->em->getRepository(TicketReseaux::class)->findBy($conditions);
foreach ($tickets as $ticket) {
$duree = $ticket->getDuree();
$nb_tickets_non_termine++;
if ($duree == 1)
$nb_tickets_bloque++;
}
return array(
'nb_tickets_non_termine' => $nb_tickets_non_termine,
'nb_tickets_bloque' => $nb_tickets_bloque
);
}
public function getNbticketAtelierNonTermineEtBloque($id = null)
{
$nb_tickets_non_termine = 0;
$nb_tickets_bloque = 0;
$conditions = array(
'archived' => null,
'deleted' => null,
'etat' => array(1, 2, 3)
);
if ($id)
$conditions['user'] = $id;
$tickets = $this->em->getRepository(Tikets::class)->findBy($conditions);
foreach ($tickets as $ticket) {
$duree = $ticket->getEtat();
$site = $ticket->getSite()->getId();
$nb_tickets_non_termine++;
if ($duree == 1 and $site == 2)
$nb_tickets_bloque++;
}
return array(
'nb_tickets_non_termine' => $nb_tickets_non_termine,
'nb_tickets_bloque' => $nb_tickets_bloque
);
}
public function getNumber($string)
{
$number = preg_replace("/[^0-9.]/", "", $string);
return $number;
}
public function sendSms($telephone, $msg)
{
//format numero de tel
$telephone = str_replace(" ", "", $telephone);
if (strlen($telephone) == 10)
$telephone = substr($telephone, 1, 9);
$telephone = "+33" . $telephone;
/******SMS****/
$endpoint = $this->container->getParameter('ovh_sms_endpoint');
$applicationKey = $this->container->getParameter('ovh_sms_applicationKey');
$applicationSecret = $this->container->getParameter('ovh_sms_applicationSecret');
$consumer_key = $this->container->getParameter('ovh_sms_consumer_key');
$fixedMessage = substr($msg, 0, 140);
try {
$conn = new Api($applicationKey, $applicationSecret, $endpoint, $consumer_key);
$smsServices = $conn->get('/sms/');
$content = (object) array(
"charset" => "UTF-8",
"class" => "phoneDisplay",
"coding" => "7bit",
"message" => $fixedMessage,
"noStopClause" => false,
"priority" => "high",
"receivers" => [$telephone],
"senderForResponse" => true,
"validityPeriod" => 2880
);
$resultPostJob = $conn->post('/sms/' . $smsServices[0] . '/jobs', $content);
$result = $conn->get('/sms/' . $smsServices[0] . '/jobs');
if (count($resultPostJob["validReceivers"]) < 1) {
$return_msg = "SMS non envoyé : Format incorrect ou numéro non activé.";
} else {
$return_msg = "valide";
}
} catch (\Exception $e) {
$return_msg = $e->getMessage();
}
return $return_msg;
}
public function get_extension_file($path)
{
$ext = pathinfo($path, PATHINFO_EXTENSION);
if ($ext == "jpg")
$ext = "jpeg";
return $ext;
}
public function get_name_file($path)
{
return pathinfo($path, PATHINFO_FILENAME);
}
public function decode_img_base64($img, $ext = null)
{
return base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $img));
}
public function decode_PDF_base64($img)
{
$img = str_replace('data:application/pdf;base64,', '', $img);
$img = str_replace(' ', '+', $img);
return base64_decode($img);
}
function get_mb($size)
{
return sprintf("%4.2f", $size / 1048576);
}
function generateSlug($text)
{
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
$text = preg_replace('~[^-\w]+~', '', $text);
$text = trim($text, '-');
$text = strtolower($text);
if (empty($text)) {
return 'n-a';
}
return $text;
}
public function upload_image($image_data = null, $file = null, $use_file_extenstion = false, $update_file = false, $frais_projet = null, $extension = null, $projet_id = null)
{
$image_ext = explode(",", $this->container->getParameter('extension_accepte'));
$request = $this->requestStack->getCurrentRequest();
$host = "https://" . $request->server->get('HTTP_HOST');
$base = (!empty($request->server->get('BASE'))) ? $request->server->get('BASE') : '';
$base_url = $host . $base;
$server_path = $request->server->get('DOCUMENT_ROOT') . $request->getBasePath();
if ($extension == null)
$extension = "png";
$originalFileName = "";
if ($file and $update_file == false) {
$extension = pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
}
if ($update_file == true)
$extension = $this->get_extension_file($file->getClientOriginalName());
if (in_array(strtoupper($extension), $image_ext) || $use_file_extenstion || $update_file) {
$location = $server_path . "/uploads/" . date("Y") . '/';
if (!file_exists($location))
mkdir($location, 0777);
$location .= date("m") . '/';
if (!file_exists($location))
mkdir($location, 0777);
$location .= date("d") . '/';
if (!file_exists($location))
mkdir($location, 0777);
$slug = $image_data ? uniqid() . $extension : $this->generateSlug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME));
$num = 0;
$filename = $slug . '.' . $extension;
while (file_exists($location . '/' . $filename)) {
$num++;
$filename = $slug . '-' . $num . '.' . $extension;
}
if ($file) {
$file->move($location, $filename);
$originalFileName = $file->getClientOriginalName();
}
$location .= $filename;
if ($image_data)
file_put_contents($location, $image_data);
$location = str_replace($server_path, $base_url, $location);
$path = "/uploads/" . date("Y") . '/' . date("m") . '/' . date("d") . '/' . $filename;
if (!$request->hasSession())
$request->setSession(new Session());
if ($frais_projet[0] == true and $frais_projet[1] == false) {
if ($originalFileName == "" && $num != null)
$originalFileName = $num;
if ($projet_id == true)
$this->set_session_img_upload('ImagesUploaded', $originalFileName, $path, $request);
return $path;
}
if ($frais_projet[0] == true and $frais_projet[1] == true) {
$response = [];
$path = "/uploads/" . date("Y") . '/' . date("m") . '/' . date("d") . '/' . $filename;
if ($originalFileName == "" && $num != null)
$originalFileName = $num;
$response[] = $this->twig->render('document/document_liste.html.twig', ['id' => $num, 'path' => $path]);
$response[] = $path;
$this->set_session_img_upload('ImagesUploaded_frais', $originalFileName, $path, $request);
return $response;
}
array_pop($image_ext);
$add_to_session = false;
if ($use_file_extenstion) {
$add_to_session = true;
$response = $this->twig->render('document/file_container.html.twig', ['id' => $num, 'path' => $path, 'isImage' => in_array(strtoupper($extension), $image_ext), 'filename' => $originalFileName]);
} elseif ($update_file) {
$response = ["path" => $path, "isImage" => in_array(strtoupper($extension), $image_ext), 'filename' => $originalFileName];
} else {
$add_to_session = true;
$response = $this->twig->render('document/document_liste.html.twig', ['id' => $num, 'path' => $path]);
}
if ($add_to_session)
$this->set_session_img_upload('ImagesUploaded', $originalFileName, $path, $request);
return $response;
}
return false;
}
public function getIconFile($extension)
{
if (in_array(strtoupper($extension), $this->image_extensions))
return "image";
else
return "pe-7s-file";
if ($extension == "pdf")
return 'fa-file-pdf';
else if ($extension == "docx")
return 'fa-file-word';
else if ($extension == "pptx")
return 'fa-file-powerpoint';
else if ($extension == "mkv")
return 'fa-file-video';
else if ($extension == "zip")
return 'fa-file-archive';
}
public function set_session_img_upload($session_name, $file_name, $path, $request)
{
$session = $request->getSession();
$images = $session->get($session_name, []);
$images[$file_name] = $path;
$session->set($session_name, $images);
}
public function generate_pdf($html, $vars = array(), $filename = 'download.pdf', $path, $size = 'A4')
{
// Run wkhtmltopdf
$descriptorspec = array(
0 => array('pipe', 'r'), // stdin
1 => array('pipe', 'w'), // stdout
2 => array('pipe', 'w'), // stderr
);
$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);
// Send the HTML on stdin
fwrite($pipes[0], $html);
fclose($pipes[0]);
// Read the outputs
$pdf = stream_get_contents($pipes[1]);
$errors = stream_get_contents($pipes[2]);
// Close the process
fclose($pipes[1]);
$return_value = proc_close($process);
// Output the results
if ($errors) {
throw new Exception('PDF generation failed: ' . $errors);
} else {
file_put_contents($path . $filename, $pdf);
return $pdf;
}
}
public function removeSpecialCaracters($str)
{
$search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
$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');
return str_replace($search, $replace, $str);
}
public function resetCookieIndicateur()
{
$cookies = $this->requestStack->getCurrentRequest()->cookies;
if ($cookies->has('indicateurs')) {
$response = new Response();
$response->headers->clearCookie('indicateurs', '/', null);
$response->sendHeaders();
}
}
public function getDefaultView($matriceVue)
{
$defaultView = array();
foreach ($matriceVue as $key => $value) {
$defaultView[$key] = $value["default"];
}
;
return ($defaultView);
}
public function getWidths()
{
$widthsColumnsView = array();
foreach ($this->widthsAndDefaultView as $key => $value) {
$widthsColumnsView[$key] = $value["width"];
}
;
return ($widthsColumnsView);
}
public function getTotalInterventionProjet($project_id, $update = false)
{
$project = $this->em->getRepository(Projects::class)->find($project_id);
$interventions = $this->em->getRepository(Interventions::class)->projectInterventionByProjectAndIntervenantPlanifer($project_id);
$duree_total = 0;
foreach ($interventions as $intervention) {
$difference = $intervention->GetDureeIntervention();
$duree = 0;
if ($difference) {
$duree = ($difference->d * 24 * 60) + ($difference->h * 60) + $difference->i;
$users = $this->em->getRepository(InterventionAffectedUsers::class)->getInterveneatnCount($intervention->getId()) ?? 0;
$duree *= $users;
$duree_total += $duree;
}
}
$result = $this->FormattedDuration($duree_total);
if ($update) {
$project->setNbHeurePlanifier($duree_total);
$this->em->persist($project);
$this->em->flush();
return;
}
return $result;
}
public function getProjectIntervenantsInterventions($project_id, $date = null, $date_fin = null, $orderByDate = false, $without_date_limit = false)
{
$project = $this->em->getRepository(Projects::class)->find($project_id);
$projectUsers = $this->em->getRepository(ProjectUsers::class)->findBy(["project" => $project_id, "type" => ["intervenant", "jointeur"]]);
$interventions = array();
$users = array();
if ($date and is_null($date_fin)) {
$start_date = $end_date = $date->format("Y-m-d");
$date_debut = new \DateTime($date->format("Y-m-d"));
$date_fin = $date->add(new \DateInterval('P1D'));
} else {
if ($date and $date_fin) {
$date_debut = $date;
} else {
$date_debut = clone $project->getDateDebut();
$date_fin = clone $project->getDateFin();
}
$start_date = $date_debut->format("Y-m-d");
$end_date = $date_fin->format("Y-m-d");
$date_fin = $date_fin->modify('+1 day');
}
$days = new \DatePeriod($date_debut, new \DateInterval('P1D'), $date_fin);
foreach ($projectUsers as $element) {
$user = $element->getUser();
$user_object = array();
$user_object["label"] = $this->getPrefixUser($user) . $user->getNom() . ' ' . $user->getPrenom();
$user_object["id"] = $user->getId();
$user_object["path"] = "";
array_push($users, $user_object);
$filters = [
'users' => [$user->getId()],
'projects' => [$project_id]
];
if (!$without_date_limit) {
$filters['start_date'] = $start_date;
$filters['end_date'] = $end_date;
}
$user_interventions = $this->InterventionsRepository->getInterventionsByFilters($filters, $orderByDate);
if ($without_date_limit) {
foreach ($user_interventions as $key => $intervention) {
$interventions[$user->getId()][] = $intervention;
}
} else {
foreach ($days as $day) {
foreach ($user_interventions as $key => $intervention) {
if ($intervention["date"] == $day)
$interventions[$user->getId()][] = $intervention;
}
}
}
}
return array(
"users" => $users,
"interventions" => $interventions,
);
}
function update_user_duree_intervention($action = null, $old_intervention = null, $new_intervention = null, $OldInterventionAffectedUsers = null)
{
if ($action == "update") {
if ($new_intervention) {
$NewInterventionAffectedUsers = $this->em->getRepository(InterventionAffectedUsers::class)->findBy(array('intervention' => $new_intervention->getId()));
foreach ($NewInterventionAffectedUsers as $NewuserAffected) {
$this->set_user_duree($NewuserAffected->getUser());
}
}
if ($old_intervention) {
$OldInterventionAffectedUsers = $this->em->getRepository(InterventionAffectedUsers::class)->findBy(array('intervention' => $old_intervention->getId()));
foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
$this->set_user_duree($OlduserAffected->getUser());
}
}
if ($OldInterventionAffectedUsers) {
foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
$this->set_user_duree($OlduserAffected->getUser());
}
}
}
if ($action == "delete") {
foreach ($OldInterventionAffectedUsers as $OlduserAffected) {
$this->set_user_duree($OlduserAffected->getUser());
}
}
return new Response("done");
}
public function getProjectEquipesInterventions($project_id, $date = null, $date_fin = null, $orderByDate = false, $without_date_limit = false)
{
$project = $this->em->getRepository(Projects::class)->find($project_id);
$projectEquipes = $this->em->getRepository(ProjectEquipe::class)->findBy(["project" => $project_id]);
$interventions = array();
$equipes = array();
if ($date and is_null($date_fin)) {
$start_date = $end_date = $date->format("Y-m-d");
$date_debut = new \DateTime($date->format("Y-m-d"));
$date_fin = $date->add(new \DateInterval('P1D'));
} else {
if ($date and $date_fin) {
$date_debut = $date;
} else {
$date_debut = clone $project->getDateDebut();
$date_fin = clone $project->getDateFin();
}
$start_date = $date_debut->format("Y-m-d");
$end_date = $date_fin->format("Y-m-d");
$date_fin = $date_fin->modify('+1 day');
}
$days = new \DatePeriod($date_debut, new \DateInterval('P1D'), $date_fin);
foreach ($projectEquipes as $element) {
$equipe = $element->getEquipe();
$object = array();
$object["libelle"] = "Equipe " . $equipe->getLibelle();
$object["id"] = $equipe->getId();
$object["path"] = "";
$equipes_users = $this->em->getRepository(Equipes::class)->findListUsers($equipe->getId());
$users_ids = array();
foreach ($equipes_users as $equipe_user) {
$users_ids[] = $equipe_user["id"];
}
$object["users"] = $users_ids;
array_push($equipes, $object);
$filters = [
'equipes' => [$equipe->getId()],
'projects' => [$project_id]
];
if (!$without_date_limit) {
$filters['start_date'] = $start_date;
$filters['end_date'] = $end_date;
}
$equipe_interventions = $this->InterventionsRepository->getInterventionsByFilters($filters, $orderByDate);
if ($without_date_limit) {
foreach ($equipe_interventions as $key => $intervention) {
$interventions[$equipe->getId()][] = $intervention;
}
} else {
foreach ($days as $day) {
foreach ($equipe_interventions as $key => $intervention) {
if ($intervention["date"] == $day)
$interventions[$equipe->getId()][] = $intervention;
}
}
}
}
return array(
"equipes" => $equipes,
"equipes_interventions" => $interventions,
);
}
public function add_notification($id_user, $content, $id_intervention = null)
{
$user = $this->em->getRepository(User::class)->find($id_user);
$notification = new Notifications();
if ($id_intervention) {
$intervention = $this->em->getRepository(Interventions::class)->find($id_intervention);
$notification->setIntervention($intervention);
}
$notification->setUser($user);
$notification->setContent($content);
$notification->setDateCreation(new \DateTime());
$this->em->persist($notification);
$this->em->flush();
}
public function getNumberNotifications()
{
$user = $this->tokenStorage->getToken()->getUser();
$notifications = $this->em->getRepository(Notifications::class)->findBy(array('user' => $user, 'readed' => null));
$count = 0;
if ($notifications)
$count = count($notifications);
return $count;
}
public function getDureeUntilToday($date)
{
$dateRecent = new \DateTime($date);
$today = new \DateTime('now');
$interval = $dateRecent->diff($today);
if ($interval->days) {
if ($interval->days == 1)
$duree = "un jour";
else
$duree = $interval->days . " jours";
} elseif ($interval->h) {
if ($interval->h == 1)
$duree = "une heure";
else
$duree = $interval->h . " heures";
} elseif ($interval->i) {
if ($interval->i == 1)
$duree = "une minute";
else
$duree = $interval->i . " minutes";
} else {
$duree = "quelques secondes";
}
return $duree;
}
public function getEntrepriseHoursFromDate($date, $planification_auto = false)
{
$entreprise_id = $this->container->getParameter('entreprise_id');
$entreprise = $this->em->getRepository(Entreprise::class)->find($entreprise_id);
$days = array_keys($this->days);
$horaires = $entreprise->getHoraires();
$day_num = intval($date->format("N")) - 1;
if (!$planification_auto) {
$morning_start = self::MORNING_START;
$morning_end = self::MORNING_END;
$midday_start = self::MIDDAY_START;
$midday_end = self::MIDDAY_END;
} else {
$morning_start = "";
$morning_end = "";
$midday_start = "";
$midday_end = "";
}
if ($horaires[$days[$day_num]]["matin"]["closed"] == false) {
if ($horaires[$days[$day_num]]["matin"]["debut"])
$morning_start = $horaires[$days[$day_num]]["matin"]["debut"];
if ($horaires[$days[$day_num]]["matin"]["fin"])
$morning_end = $horaires[$days[$day_num]]["matin"]["fin"];
}
if ($horaires[$days[$day_num]]["apresMidi"]["closed"] == false) {
if ($horaires[$days[$day_num]]["apresMidi"]["debut"])
$midday_start = $horaires[$days[$day_num]]["apresMidi"]["debut"];
if ($horaires[$days[$day_num]]["apresMidi"]["fin"])
$midday_end = $horaires[$days[$day_num]]["apresMidi"]["fin"];
}
return array(
'morning_start_hour' => $morning_start,
'morning_end_hour' => $morning_end,
'midday_start_hour' => $midday_start,
'midday_end_hour' => $midday_end
);
}
public function getListInterventions($lists_interventions_intervenants)
{
if (isset($lists_interventions_intervenants["interventions"]))
$interventions = $lists_interventions_intervenants["interventions"];
else
$interventions = $lists_interventions_intervenants["equipes_interventions"];
$interventionsByUser = array_values($interventions);
$array_interventions = array();
foreach ($interventionsByUser as $interventionByUser) {
$array_interventions = array_merge($array_interventions, $interventionByUser);
}
return $array_interventions;
}
public function getListIntervenants($lists_interventions_intervenants)
{
$all_users = $lists_interventions_intervenants["users"];
$interventions = $lists_interventions_intervenants["interventions"];
$interventions_users = array_keys($interventions);
$result = array_filter($all_users, function ($value, $key) use ($interventions_users) {
return in_array($value["id"], $interventions_users);
}, ARRAY_FILTER_USE_BOTH);
return $result;
}
public function getListEquipes($lists_interventions_intervenants)
{
$all_equipes = $lists_interventions_intervenants["equipes"];
$interventions = $lists_interventions_intervenants["equipes_interventions"];
$interventions_equipes = array_keys($interventions);
$result = array_filter($all_equipes, function ($value, $key) use ($interventions_equipes) {
return in_array($value["id"], $interventions_equipes);
}, ARRAY_FILTER_USE_BOTH);
return $result;
}
public function timeToMinute($time)
{
$start_date = new \DateTime('now');
$difference = $start_date->modify("+1 minutes")->diff(new \DateTime('now +' . $time));
$duree = ($difference->d * 24 * 60) + ($difference->h * 60) + $difference->i;
return $duree;
}
public function minuteToInputTime($minutes)
{
$heures = 0;
while ($minutes >= 60) {
$heures++;
$minutes -= 60;
}
$time = $this->intToStrForTime($heures) . ":" . $this->intToStrForTime($minutes);
return $time;
}
function intToStrForTime($int)
{
if ($int == 0)
return '00';
elseif ($int <= 9)
return '0' . $int;
elseif ($int >= 10)
return $int;
else
return '99';
}
public function calc_taux_frais($id_projet)
{
$projet = $this->em->getRepository(Projects::class)->find($id_projet);
$projet_frais = $this->em->getRepository(ProjectFrais::class)->findBy(['project' => $projet, 'deleted' => null]);
$taux_frais = 0;
foreach ($projet_frais as $val) {
$taux_frais += $val->getQuantity() * $val->getPrixUnitaire();
}
return $taux_frais;
}
public function total_main_oeuvre($id)
{
$total_main_oeuvre = $this->em->getRepository('App\Entity\ProjectSuiviTravaux')->getTotalMainOeuvre($id);
return $total_main_oeuvre ?? 0;
}
public function restant_facture_regler($id = null)
{
$request = $this->requestStack->getCurrentRequest();
if ($request->get("id_projet"))
$id = $request->get("id_projet");
if (!$request->get("devis")) {
;
$projet = $this->em->getRepository(Projects::class)->find($id);
$devis = $projet->getDevis();
} else {
$devis = floatval($request->get("devis"));
}
$projet_facturation = $this->em->getRepository(ProjectFacturation::class)->findBy(["project" => $id]);
$facture = 0;
$regler = 0;
foreach ($projet_facturation as $val) {
$facture += $val->getMontantFacture();
$regler += $val->getMontantRegle();
}
;
if ($request->get("id_projet"))
return new Response(json_encode(["facture" => $facture, "regler" => $regler]));
else
return [$facture, $regler];
}
private function setJointeurItem(&$item)
{
if (array_key_exists("user_id", $item) && array_key_exists("project_id", $item)) {
$project_user = $this->em->getRepository(ProjectUsers::class)->findOneBy(["project" => $item["project_id"], "user" => $item["user_id"], "type" => "jointeur"]);
if ($project_user)
$item["dotted_border"] = true;
}
}
private function getItemForWeekType($old_date, $intervention_date, $week_start, $week_end, $item, $items, $client_name, $is_last_intervention, $get_clients)
{
$next_date = clone $old_date;
$next_date->add(new \DateInterval("P7D"));
$intervention_date_str = $intervention_date->format("Y-m-d");
$is_in_same_or_next_week = $intervention_date_str >= substr($item['start_date'], 0, 10) && ($intervention_date_str <= $week_end->format("Y-m-d") || $intervention_date_str <= $next_date->format("Y-m-d"));
if ($is_last_intervention) {
if ($is_in_same_or_next_week) {
if ($get_clients && !in_array($client_name, $item['clients']))
$item['clients'][] = $client_name;
$item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
if ($intervention_date_str > $week_end->format('Y-m-d'))
$item['end_date'] = $next_date->format('Y-m-d') . " 23:59:00";
} else {
$item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
$this->setJointeurItem($item);
$items[] = $item;
$week_dates = $this->getWeekStartAndEndDate($intervention_date);
$week_start = $week_dates['week_start'];
$week_end = $week_dates['week_end'];
$item['start_date'] = $week_start->format('Y-m-d 00:00:00');
$item['end_date'] = $week_end->format('Y-m-d') . " 23:59:00";
if ($get_clients)
$item['clients'] = [$client_name];
}
$this->setJointeurItem($item);
$items[] = $item;
} else {
if ($is_in_same_or_next_week) {
if ($get_clients && !in_array($client_name, $item['clients']))
$item['clients'][] = $client_name;
if ($intervention_date_str > $week_end->format('Y-m-d'))
$old_date = $next_date;
} else {
$item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
$this->setJointeurItem($item);
$items[] = $item;
if ($get_clients)
$item['clients'] = [$client_name];
$week_dates = $this->getWeekStartAndEndDate($intervention_date);
$week_start = $week_dates['week_start'];
$item['start_date'] = $week_start->format('Y-m-d 00:00:00');
$old_date = $week_end = $week_dates['week_end'];
}
}
return array(
'item' => $item,
'items' => $items,
'old_date' => $old_date,
'week_start' => $old_date,
'week_end' => $old_date,
);
}
public function getClientForDate($start, $end = null, $user_id = null, $equipe_id = null)
{
$clients_ids = [];
$clients_name = [];
$end = $end ?? $start;
$filters = [
"start_date" => $start,
"end_date" => $end,
];
if ($user_id)
$filters["users"] = [$user_id];
else
$filters["equipes"] = [$equipe_id];
$clients = $this->em->getRepository(Interventions::class)->getInterventionsByFilters($filters, false, false, false, false, false, true);
return array_column($clients, 'client');
}
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)
{
$next_date = clone $old_date;
$next_date->add(new \DateInterval("P1D"));
$is_same_client = false;
if ($intervention_date->format("Y-m-d") == $next_date->format("Y-m-d")) {
if (isset($item["user_id"])) {
$old_client = $this->getClientForDate($old_date->format("d-m-Y"), null, $item["user_id"]);
$new_client = $this->getClientForDate($next_date->format("d-m-Y"), null, $item["user_id"]);
$is_same_client = empty(array_diff($old_client, $new_client)) && empty(array_diff($new_client, $old_client));
}
if (isset($item["equipe_id"])) {
$old_client = $this->getClientForDate($old_date->format("d-m-Y"), null, null, $item["equipe_id"]);
$new_client = $this->getClientForDate($next_date->format("d-m-Y"), null, null, $item["equipe_id"]);
$is_same_client = empty(array_diff($old_client, $new_client)) && empty(array_diff($new_client, $old_client));
}
}
if ($is_last_intervention) {
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)) {
if ($get_clients && !in_array($client_name, $item['clients']))
$item['clients'][] = $client_name;
$item['end_date'] = $intervention_date->format('Y-m-d') . " 23:59:00";
} else {
$item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
$item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
$item['end_date'] = $intervention_date->format('Y-m-d') . " 23:59:00";
if ($get_clients)
$item['clients'] = [$client_name];
}
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
} else {
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)) {
if ($get_clients && !in_array($client_name, $item['clients']))
$item['clients'][] = $client_name;
$old_date = $intervention_date;
$old_end_hour = $item_end_hour;
} else {
$item['end_date'] = $old_date->format('Y-m-d') . " 23:59:00";
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
if ($get_clients)
$item['clients'] = [$client_name];
$item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
$old_date = $intervention_date;
}
}
return array(
'item' => $item,
'items' => $items,
'old_date' => $old_date,
'old_end_hour' => $old_end_hour,
);
}
public function addClinetColor(&$item, $graphic_view_colors, $object_key, $cookie_updated)
{
$start_dateTime = \DateTime::createFromFormat('Y-m-d H:i:s', $item['start_date']);
$end_dateTime = \DateTime::createFromFormat('Y-m-d H:i:s', $item['end_date']);
$start = $start_dateTime->format('Y-m-d');
$end = $end_dateTime->format('Y-m-d');
$client_id = null;
if (isset($item["user_id"])) {
$client_id = $this->getClientForDate($start, $end, $item["user_id"])[0];
}
if (isset($item["equipe_id"])) {
$client_id = $this->getClientForDate($start, $end, null, $item["equipe_id"])[0];
}
$color_item = $this->getItemColor($client_id, $graphic_view_colors, $object_key, $cookie_updated)['item_color'];
$item['color'] = $color_item;
return $item;
}
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)
{
$item_hours = $this->getItemHours($intervention);
$item_start_hour = $item_hours['item_start_hour'];
$item_end_hour = $item_hours['item_end_hour'];
if ($isNewItem || ($item_start_date == $intervention_date->format("Y-m-d") && $item_start_hour < $old_start_hour))
$old_start_hour = $item_start_hour;
if ($old_end_hour == null)
$old_end_hour = $item_end_hour;
if ($is_last_intervention) {
if ($get_clients)
$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);
else
$items = $this->addLastItemWeekView($intervention_date, $old_date, $item, $items, $item_start_date, $item_start_hour, $item_end_hour, $old_start_hour, $old_end_hour, false, $graphic_view_colors, $object_key, $cookie_updated);
} else {
$next_date = clone $old_date;
$next_date->add(new \DateInterval("P1D"));
$isSameDay = $intervention_date->format("Y-m-d") == $old_date->format("Y-m-d");
$isNextDay = $intervention_date->format("Y-m-d") == $next_date->format("Y-m-d");
$isNextHour = $old_end_hour == "23:59:00" && $item_start_hour == "00:00:00";
$is_same_client = false;
if (($isNextDay && $isNextHour) || ($isSameDay && ($old_end_hour == "11:59:00" && $item_start_hour == "12:00:00"))) {
$old_time_start = $old_date->format("d-m-Y") . " " . $old_start_hour;
$old_time_end = $old_date->format("d-m-Y") . " " . $old_end_hour;
if ($isNextDay) {
$new_time_start = $next_date->format("d-m-Y") . " " . $item_start_hour;
$new_time_end = $next_date->format("d-m-Y") . " " . $item_end_hour;
} else {
$new_time_start = $old_date->format("d-m-Y") . " " . $item_start_hour;
$new_time_end = $old_date->format("d-m-Y") . " " . $item_end_hour;
}
if (isset($item["user_id"])) {
$old_client = $this->getClientForDate($old_time_start, $old_time_end, $item["user_id"]);
$new_client = $this->getClientForDate($new_time_start, $new_time_end, $item["user_id"]);
$is_same_client = empty(array_diff($old_client, $new_client)) && empty(array_diff($new_client, $old_client));
}
if (isset($item["equipe_id"])) {
$old_client = $this->getClientForDate($old_date->format("d-m-Y"), null, null, $item["equipe_id"]);
$new_client = $this->getClientForDate($next_date->format("d-m-Y"), null, null, $item["equipe_id"]);
$is_same_client = empty(array_diff($old_client, $new_client)) && empty(array_diff($new_client, $old_client));
}
}
if ($isSameDay || ($isNextDay && $isNextHour && $is_same_client)) {
if ($get_clients && !in_array($client_name, $item['clients']))
$item['clients'][] = $intervention->getClient()->GetLibelleClient();
$old_date = $intervention_date;
$old_end_hour = $item_end_hour;
} else {
$item['start_date'] = $item_start_date . ' ' . $old_start_hour;
$item['end_date'] = $old_date->format('Y-m-d') . ' ' . $old_end_hour;
$old_date = $intervention_date;
$item_start_date = $intervention_date->format('Y-m-d');
$old_start_hour = $item_start_hour;
$old_end_hour = $item_end_hour;
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
if ($get_clients)
$item['clients'] = [$client_name];
}
}
return array(
'item' => $item,
'items' => $items,
'old_date' => $old_date,
'old_start_hour' => $old_start_hour,
'old_end_hour' => $old_end_hour,
'item_start_date' => $item_start_date,
);
}
public function getWeekStartAndEndDate($date, $year = null)
{
$week = $date->format("W");
if (!$year)
$year = $date->format("Y");
$week_start = clone $date;
$week_start = $week_start->setISODate($year, $week, 1);
if ($week_start > $date)
$week_start->setISODate(--$year, $week, 1);
$week_end = clone $week_start;
$week_end = $week_end->modify("+6 days");
return array(
'week_start' => $week_start,
'week_end' => $week_end
);
}
public function getItemsForUsersAndMateriels($object_id, $object_key, $interventions, $items, $item, $show_type, $cookie_updated, $graphic_view_colors, $projects = null)
{
$old_date = null;
$item_start_date = null;
$item_start_hour = null;
$item_end_hour = null;
$old_start_hour = null;
$old_end_hour = null;
$get_clients = false;
$week_start = null;
$week_end = null;
foreach ($interventions as $key => $intervention) {
if (is_array($intervention))
$intervention_date = $intervention['date'];
else {
$intervention_date = $intervention->getDate();
$get_clients = true;
}
$isNewItem = false;
if ($old_date == null) {
if ($item_start_date != null && $show_type == "hour") {
$old_date = new \Datetime($item_start_date);
} else {
$isNewItem = true;
$old_date = $intervention_date;
$item_start_date = $intervention_date->format('Y-m-d');
if ($show_type === "week") {
$week_dates = $this->getWeekStartAndEndDate($intervention_date);
$week_start = $week_dates['week_start'];
$old_date = $week_end = $week_dates['week_end'];
$item['start_date'] = $week_start->format('Y-m-d 00:00:00');
}
}
if ($projects) {
if (array_key_exists("project_id", $item) && array_key_exists($item["project_id"], $projects) && array_key_exists("color", $projects[$item["project_id"]]))
$item['project_color'] = $projects[$item["project_id"]]["color"];
else {
$project_key = array_search($item["project_id"], array_column($projects, 'id'));
$item['project_color'] = $projects[$project_key]["color"];
}
} elseif ($object_id) {
$item_color_result = $this->getItemColor($object_id, $graphic_view_colors, $object_key, $cookie_updated);
$item['color'] = $item_color_result['item_color'];
$cookie_updated = $item_color_result['cookie_updated'];
$graphic_view_colors = $item_color_result['graphic_view_colors'];
}
if ($show_type == "day")
$item['start_date'] = $intervention_date->format('Y-m-d H:i:s');
}
if ($get_clients && !array_key_exists('clients', $item))
$item['clients'] = [];
$client_name = $get_clients ? $intervention->getClient()->GetLibelleClient() : null;
$is_last_intervention = $key == (count($interventions) - 1);
if ($show_type === "day" || $show_type === "week") {
$items_result = [];
if ($show_type === "day") {
$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);
$old_end_hour = $items_result['old_end_hour'];
} else {
$items_result = $this->getItemForWeekType($old_date, $intervention_date, $week_start, $week_end, $item, $items, $client_name, $is_last_intervention, $get_clients);
$week_start = $items_result['week_start'];
$week_end = $items_result['week_end'];
}
$item = $items_result['item'];
$items = $items_result['items'];
$old_date = $items_result['old_date'];
} else {
$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);
$item = $hour_items_result['item'];
$items = $hour_items_result['items'];
$old_date = $hour_items_result['old_date'];
$old_start_hour = $hour_items_result['old_start_hour'];
$old_end_hour = $hour_items_result['old_end_hour'];
$item_start_date = $hour_items_result['item_start_date'];
}
}
return array(
"items" => $items,
"graphic_view_colors" => $graphic_view_colors,
"cookie_updated" => $cookie_updated,
);
}
private function getItemHours($intervention)
{
$date = null;
$start_hour = null;
$end_hour = null;
if (is_array($intervention)) {
$date = $intervention['date'];
$start_hour = $intervention["heure_debut"];
$end_hour = $intervention["heure_fin"];
} else {
$date = $intervention->getDate();
$start_hour = $intervention->getHeureDebut();
$end_hour = $intervention->getHeureFin();
}
$entreprise_horaires = $this->getEntrepriseHoursFromDate($date);
$morning_end_hour = $entreprise_horaires["morning_end_hour"];
$midday_start_hour = $entreprise_horaires["midday_start_hour"];
if ($start_hour < $morning_end_hour)
$item_start_hour = '00:00:00';
else
$item_start_hour = '12:00:00';
if ($end_hour > $midday_start_hour)
$item_end_hour = '23:59:00';
else
$item_end_hour = '11:59:00';
return array(
"item_start_hour" => $item_start_hour,
"item_end_hour" => $item_end_hour,
);
}
public function getItemColor($object_id, $graphic_view_colors, $i, $cookie_updated)
{
$request = $this->requestStack->getCurrentRequest();
$cookies = $request->cookies;
if (array_key_exists($object_id, $graphic_view_colors)) {
$item_color = $graphic_view_colors[$object_id];
} else {
// $Exsist = false ;
// while (!$Exsist) {
// $item_color = $this->getRandomColorCode();
// if (!in_array( $item_color, array_values($graphic_view_colors))) $Exsist = true;
// }
$cookie_updated = true;
$item_color = $this->getRandomColorCode();
$graphic_view_colors[$object_id] = $item_color;
}
return array(
'item_color' => $item_color,
'cookie_updated' => $cookie_updated,
'graphic_view_colors' => $graphic_view_colors,
);
}
function getRandomColorCode()
{
$r = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
$g = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
$b = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
$colorCode = '#' . $r . $g . $b;
return $colorCode;
}
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)
{
$next_date = clone $old_date;
$next_date->add(new \DateInterval("P1D"));
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"))) {
$item['start_date'] = $item_start_date . ' ' . $old_start_hour;
$item['end_date'] = $intervention_date->format('Y-m-d') . ' ' . $item_end_hour;
if ($client_name && !in_array($client_name, $item['clients']))
$item['clients'][] = $client_name;
} else {
$item['start_date'] = $item_start_date . ' ' . $old_start_hour;
$item['end_date'] = $old_date->format('Y-m-d') . ' ' . $old_end_hour;
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
if ($client_name)
$item['clients'] = [$client_name];
$item['start_date'] = $intervention_date->format('Y-m-d') . ' ' . $item_start_hour;
$item['end_date'] = $intervention_date->format('Y-m-d') . ' ' . $item_end_hour;
}
$item = $this->addClinetColor($item, $graphic_view_colors, $object_key, $cookie_updated);
$items[] = $item;
return $items;
}
public function pageTypeCookies($page_name, $dataPageType)
{
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();
$pageTypeValue = $session->get('page-type', []);
if (is_array($page_name)) {
$pageTypeValue[$page_name[0]] = $dataPageType[0];
$pageTypeValue[$page_name[1]] = $dataPageType[1];
} else
$pageTypeValue[$page_name] = $dataPageType;
$session->set('page-type', $pageTypeValue);
}
public function GetTypeCookies($pageName, $is_intervention = false)
{
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();
$pageTypeValue = $session->get('page-type', []);
if (isset($pageTypeValue[$pageName])) {
if ($is_intervention) {
$res = array("path" => $pageTypeValue[$pageName]);
if (array_key_exists("InterventionsType", $pageTypeValue) && $pageTypeValue["InterventionsType"])
$res["type"] = $pageTypeValue["InterventionsType"];
return $res;
}
return $pageTypeValue[$pageName];
} else {
return "liste";
}
}
public function checkClientAccess($id_client, UrlGeneratorInterface $urlGenerator = null)
{
$connectionUrl = $urlGenerator ? $urlGenerator->generate('connexion') : $this->router->generate('connexion');
if (!$this->tokenStorage->getToken()) {
return new RedirectResponse($connectionUrl);
}
$user = $this->tokenStorage->getToken()->getUser();
if (!$user) {
return new RedirectResponse($connectionUrl);
}
$clientUser = $user->getClient();
if ($clientUser) {
$id_clientUser = $clientUser->getId();
if ($id_clientUser != $id_client) {
return 'home';
}
}
return "access";
}
public function getEntrepriseId()
{
$entreprise_id = $this->container->getParameter('entreprise_id');
return $entreprise_id;
}
public function objectFilterToArray($filter)
{
$parameters = array();
if ($filter) {
foreach ($filter as $key => $value) {
if ($value) {
if (strpos($key, '[]')) {
$newkey = str_replace('[]', '', $key);
$parameters[$newkey] = $value;
} else {
if ($key !== "")
$parameters[$key] = $value;
}
}
}
}
return $parameters;
}
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)
{
$entreprise_id = $this->container->getParameter('entreprise_id');
$entreprise = $this->em->getRepository(Entreprise::class)->find($entreprise_id);
$intervention = new Interventions();
$intervention->setClient($client);
$intervention->setAdresseClient($address);
if ($type)
$intervention->setType($type);
if ($project) {
$intervention->setType("forfait_contrat_projets");
$intervention->setProject($project);
}
$intervention->setClientName($client->GetLibelleClient());
$intervention->setDate($start_date->format("Y-m-d"));
$intervention->setHeureDebut($start_hour);
$intervention->setHeureFin($end_hour);
$client_interne = $entreprise->getCompteInterne();
$client_interne_id = $client_interne->getId();
if ($client->getId() != $client_interne_id) {
$intervention->setSite($client->getSiteAffectation());
} else {
$site = $this->em->getRepository(Site::class)->findOneBy(['adresse' => $address->getId()]);
if ($site)
$intervention->setSite($site);
if ($is_intervention_add_check) {
$intervention->setFacture("");
$intervention->setType("offert");
}
}
$equipes = [];
$users = [];
$equipes_old_productivities = [];
if ($is_intervention_add_check) {
if ($items) {
$tab = $items;
sort($tab);
$les_intervenant = [];
foreach ($tab as $interv) {
$test_type = explode("|", $interv);
if ($test_type[0] == "e") {
$equipe = $this->em->getRepository(Equipes::class)->find($test_type[1]);
$equipes[$equipe->getId()] = $equipe;
if ($makeUpdateProductivity && $project && $project->getIsAutoPlanified()) {
$equipes_old_productivities[$equipe->getId()] = $this->getEquipeProductivityByDate($equipe->getId(), $start_date->format("Y-m-d"))["old_productivite"];
}
} elseif ($test_type[0] == "u") {
array_push($les_intervenant, intval($test_type[1]));
}
}
if (count($les_intervenant) > 0)
$users = $les_intervenant;
else
$users = [];
}
} else {
$intervention->setType("");
$listTechniciensNames = "";
if ($isEquipe) {
$equipes = [$items];
} else {
$users = [$items->getId()];
$intervention->setTechniciensNames($items->getNom() . " " . $items->getPrenom() . "|");
}
}
$intervention->setDescription("");
$intervention->setFacture("");
if ($project && !$is_intervention_add_check)
$intervention->setEtatIntervention("resolu");
$this->em->persist($intervention);
$this->em->flush();
$update_users = $this->SetInterventionUsers($users, $intervention);
if (count($equipes) > 0)
$update_equipes = $this->setEquipes($equipes, $intervention);
if ($project) {
$this->getTotalInterventionProjet($intervention->getProject()->getId(), true);
$result = $this->setProjectAffectedDayByIntervention($intervention, 'add');
}
if (!$is_intervention_add_check || $forceDureeCalc) {
$this->setDureeIntervention($intervention);
}
if (count($equipes_old_productivities) > 0) {
foreach ($equipes_old_productivities as $equipe_id => $equipe_old_productivity) {
$update_productivity_result = $this->update_productivity($equipe_id, $intervention->getDate()->format('Y-m-d'), $project->getId(), "add", $equipe_old_productivity);
}
}
return $intervention;
}
public function setEquipes($equipes, $intervention, $updateProductivity = false, $old_equipes = null)
{
foreach ($equipes as $equipe) {
$old_productivity = null;
if ($updateProductivity && !in_array($equipe->getId(), $old_equipes)) {
$old_productivity = $this->getEquipeProductivityByDate($equipe->getId(), $intervention->getDate()->format("Y-m-d"))["old_productivite"];
unset($old_equipes[$equipe->getId()]);
}
$this->addInterventionAffectedEquipe($intervention, $equipe);
if ($old_productivity !== null) {
$this->update_productivity($equipe->getId(), $intervention->getDate()->format('Y-m-d'), $intervention->getProject()->getId(), "add", $old_productivity);
}
}
}
public function addInterventionAffectedEquipe($intervention, $equipe)
{
$interventionAffectedEquipe = $this->em->getRepository(InterventionAffectedEquipes::class)->findOneBy(["equipe" => $equipe->getId(), "intervention" => $intervention->getId()]);
if (!$interventionAffectedEquipe) {
$InterventionAffectedEquipes = new InterventionAffectedEquipes();
$InterventionAffectedEquipes->setEquipe($equipe);
$InterventionAffectedEquipes->setIntervention($intervention);
$this->em->persist($InterventionAffectedEquipes);
$this->em->flush();
}
}
function SetInterventionUsers($users, $intervention, $modify_check = false, $old_date = null)
{
$projectUsersIds = null;
if ($intervention->getProject()) {
$projectUsersIds = array();
$projectUsers = $this->em->getRepository(ProjectUsers::class)->findBy(["project" => $intervention->getProject()->getId()]);
foreach ($projectUsers as $object) {
$projectUsersIds[] = $object->getUser()->getId();
}
}
if (($users) && (strpos($users[0], "|") != false)) {
$tab = $users;
sort($tab);
$equipes_intervention = [];
$les_intervenant = [];
$intervEquipe = $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
$old_equipes = [];
$updateProductivity = $modify_check && $intervention->getProject() && $intervention->getProject()->getIsAutoPlanified();
$date = $intervention->getDate()->format("Y-m-d");
if ($old_date !== null)
$date = $old_date;
if ($intervEquipe) {
foreach ($intervEquipe as $intervE) {
$old_productivity = null;
$equipe_id = $intervE->getEquipe()->getId();
$old_equipes[$equipe_id] = $equipe_id;
if ($updateProductivity) {
if (!in_array("e|" . $equipe_id, $tab)) {
$productivity = $this->getEquipeProductivityByDate($intervE->getEquipe()->getId(), $date, true);
$old_productivity = $productivity["old_productivite"];
$new_productivity = $productivity["new_productivite"];
}
}
if ($old_productivity != null) {
$dateObj = \DateTime::createFromFormat('Y-m-d', $date);
$this->add_project_intervention_task($intervention->getProject(), $intervE->getEquipe(), $dateObj, $old_productivity, $new_productivity);
$update_productivity_result = $this->update_productivity($equipe_id, $date, $intervention->getProject()->getId(), "remove", $old_productivity);
$this->em->remove($intervE);
$this->em->flush();
}
}
}
//delete id equipe exist in the list tab and the database
foreach ($intervEquipe as $i) {
if (in_array("e|" . $i->getEquipe()->getId(), $tab)) {
$pos = array_search("e|" . $i->getEquipe()->getId(), $tab);
array_splice($tab, $pos, 1);
}
}
//Add the new intervention
foreach ($tab as $interv) {
$test_type = explode("|", $interv);
if ($test_type[0] == "e") {
$equipe = $this->em->getRepository(Equipes::class)->find($test_type[1]);
array_push($equipes_intervention, $equipe);
} else {
array_push($les_intervenant, intval($test_type[1]));
}
}
if (count($equipes_intervention) > 0)
$this->setEquipes($equipes_intervention, $intervention, $updateProductivity, $old_equipes);
if (count($les_intervenant) > 0)
$users = $les_intervenant;
else
$users = [];
}
$users = $users ?? [];
foreach ($users as $id_user) {
$userObj = $this->em->getRepository(User::class)->find($id_user);
$interventionAffectedUser = $this->em->getRepository(InterventionAffectedUsers::class)->findOneBy(["user" => $id_user, "intervention" => $intervention->getId()]);
if (!$interventionAffectedUser) {
$user = new InterventionAffectedUsers();
$user->setIntervention($intervention);
$user->setUser($userObj);
$this->em->persist($user);
$this->em->flush();
}
if ($projectUsersIds && !in_array($id_user, $projectUsersIds)) {
$projectUser = new ProjectUsers();
$projectUser->setProject($intervention->getProject());
$projectUser->setUser($userObj);
$projectUser->setType("intervenant");
$this->em->persist($projectUser);
$this->em->flush();
}
}
return true;
}
function setDureeIntervention($intervention)
{
$originalDate = $intervention->getDate();
$originalDate = $originalDate->format('Y-m-d H:i:s');
$newDate = date("d-m-Y", strtotime($originalDate));
$difference = $intervention->GetDureeIntervention();
$duree = ($difference->d * 24 * 60) + ($difference->h * 60) + $difference->i;
$users = $this->em->getRepository(InterventionAffectedUsers::class)->findBy(["intervention" => $intervention]);
$equipes = $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(["intervention" => $intervention]);
$duree *= count($users) + count($equipes);
$intervention->setDuree($duree);
$this->em->flush();
}
public function setProjectAffectedDayByIntervention($intervention, $type, $old_date = null, $old_start_hour = null, $old_end_hour = null)
{
$projectAffectedDay = $this->em->getRepository(ProjectAffectedDays::class)->findOneBy(array('project' => $intervention->getProject(), 'date' => $intervention->getDate()));
if (!$projectAffectedDay) {
$projectAffectedDay = new ProjectAffectedDays();
$projectAffectedDay->setProject($intervention->getProject());
$projectAffectedDay->setDate($intervention->getDate());
$projectAffectedDay->setMatin(0);
$projectAffectedDay->setApreMidi(0);
}
$entreprise_horaires = $this->getEntrepriseHoursFromDate($intervention->getDate());
$morning_end_hour = $entreprise_horaires["morning_end_hour"];
$midday_start_hour = $entreprise_horaires["midday_start_hour"];
$new_morning_value = null;
$new_midday_value = null;
if ($type == "delete") {
if ($projectAffectedDay->getMatin() >= 1)
$new_morning_value = $projectAffectedDay->getMatin() - 1;
if ($projectAffectedDay->getApreMidi() >= 1)
$new_midday_value = $projectAffectedDay->getApreMidi() - 1;
} elseif ($type == "add") {
$new_morning_value = $projectAffectedDay->getMatin() + 1;
$new_midday_value = $projectAffectedDay->getApreMidi() + 1;
} else {
if ($old_date != $intervention->getDate()) {
$oldProjectAffectedDay = $this->em->getRepository(ProjectAffectedDays::class)->findOneBy(array('project' => $intervention->getProject(), 'date' => $old_date));
if ($oldProjectAffectedDay) {
if ($old_start_hour < $morning_end_hour && $oldProjectAffectedDay->getMatin() > 0)
$oldProjectAffectedDay->setMatin($oldProjectAffectedDay->getMatin() - 1);
if ($old_end_hour > $midday_start_hour && $oldProjectAffectedDay->getApreMidi() > 0)
$oldProjectAffectedDay->setApreMidi($oldProjectAffectedDay->getApreMidi() - 1);
$this->em->flush();
}
} else {
if ($old_start_hour < $morning_end_hour && $projectAffectedDay->getMatin() > 0)
$projectAffectedDay->setMatin($projectAffectedDay->getMatin() - 1);
if ($old_end_hour > $midday_start_hour && $projectAffectedDay->getApreMidi() > 0)
$projectAffectedDay->setApreMidi($projectAffectedDay->getApreMidi() - 1);
$this->em->flush();
}
$new_morning_value = $projectAffectedDay->getMatin() + 1;
$new_midday_value = $projectAffectedDay->getApreMidi() + 1;
}
if ($new_morning_value && $intervention->getHeureDebut() < $morning_end_hour)
$projectAffectedDay->setMatin($new_morning_value);
if ($new_midday_value && $intervention->getHeureFin() > $midday_start_hour)
$projectAffectedDay->setApreMidi($new_midday_value);
$this->em->persist($projectAffectedDay);
$this->em->flush();
return new Response("done");
}
function add_project_intervention_task($current_project, $object, $date, $old_productivity, $new_productivity, $addToCurrent = false)
{
if ($addToCurrent)
$projects = [$current_project];
else {
if ($object instanceof User)
$projects = $this->ProjectsRepository->getUsersInterventionByDate($current_project, $object, $date);
else
$projects = $this->ProjectsRepository->getEquipesInterventionByDate($current_project, $object, $date);
}
foreach ($projects as $project) {
$ProjectsAutoPlanifiedTasks = new ProjectsAutoPlanifiedTasks();
$ProjectsAutoPlanifiedTasks->setProject($project);
$ProjectsAutoPlanifiedTasks->setDate($date);
$ProjectsAutoPlanifiedTasks->setOldProductivity($old_productivity);
$ProjectsAutoPlanifiedTasks->setNewProductivity($new_productivity);
if ($object instanceof User)
$ProjectsAutoPlanifiedTasks->setUser($object);
else
$ProjectsAutoPlanifiedTasks->setEquipe($object);
$this->em->persist($ProjectsAutoPlanifiedTasks);
$this->em->flush();
}
return true;
}
public function update_productivity($equipe_id, $date, $project_id, $action, $old_productivity)
{
$date_productivity_data = $this->getEquipeProductivityByDate($equipe_id, $date);
if ($date_productivity_data) {
$project = $this->em->getRepository(Projects::class)->find($project_id);
if ($project->getIsAutoPlanified()) {
$new_productivity = 0;
if ($project->getTotalProductivity())
$new_productivity = floatval($project->getTotalProductivity());
switch ($action) {
case "add":
$new_productivity += $date_productivity_data["old_productivite"];
break;
case "remove":
$old_productivity ? $new_productivity -= $old_productivity : $new_productivity -= $date_productivity_data["old_productivite"];
break;
default:
break;
}
$project->setTotalProductivity($new_productivity);
$this->em->flush();
$projects = $date_productivity_data["projects"];
$other_projects = array();
if ($projects) {
$other_projects = array_values(
array_filter(array_column($projects, 'id'), function ($id) use ($project_id) {
return $id != $project_id;
})
);
}
$result = array(
"equipe_productivity" => $date_productivity_data["old_productivite"],
"new_productivity" => $new_productivity,
"other_projects" => $other_projects
);
if ($old_productivity != $date_productivity_data["old_productivite"]) {
foreach ($other_projects as $other_project_id) {
$other_project = $this->em->getRepository(Projects::class)->find($other_project_id);
$equipe = $this->em->getRepository(Equipes::class)->find($equipe_id);
$date_object = new \Datetime($date);
if ($action == "remove" && $old_productivity === false)
$task = $this->add_project_intervention_task($other_project, $equipe, $date_object, $date_productivity_data["new_productivite"], $date_productivity_data["old_productivite"], true);
else
$task = $this->add_project_intervention_task($other_project, $equipe, $date_object, $old_productivity, $date_productivity_data["old_productivite"], true);
}
}
return $result;
}
return "project is not auto planified";
}
}
public function unassign_user_from_intervention($intervention, $user_id)
{
$this->UpdateSuiviTravaux($intervention->getId(), "deleted", ['user_id' => $user_id]);
$interventionAffectedUser = $this->em->getRepository(InterventionAffectedUsers::class)->findOneBy(['intervention' => $intervention->getId(), 'user' => $user_id]);
if ($interventionAffectedUser) {
$this->em->remove($interventionAffectedUser);
$this->em->flush();
$this->update_user_duree_intervention("delete", null, null, $interventionAffectedUser);
$this->update_intervention_new_field($intervention);
$interventionAffectedUsers = $this->em->getRepository(InterventionAffectedUsers::class)->findBy(['intervention' => $intervention->getId()]);
$interventionAffectedEquipes = $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
if (empty($interventionAffectedUsers) && empty($interventionAffectedEquipes)) {
$this->em->getRepository(InterventionsMateriel::class)->remove_InterventionMateriel($intervention);
$this->em->getRepository(InterventionAffectedEquipes::class)->remove_InterventionAffectedEquipes($intervention);
$this->em->getRepository(InterventionAffectedTags::class)->remove_InterventionAffectedTagsRepository($intervention);
$this->em->getRepository(InterventionImages::class)->remove_InterventionImagesRepository($intervention);
$this->InterventionsRepository->remove_interventions($intervention);
$this->UpdateSuiviTravaux($intervention->getId(), "deleted");
}
$this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
return true;
}
return false;
}
public function unassign_equipe_from_intervention($intervention, $equipe_id)
{
$interventionAffectedEquipe = $this->em->getRepository(InterventionAffectedEquipes::class)->findOneBy(['intervention' => $intervention->getId(), 'equipe' => $equipe_id]);
if ($interventionAffectedEquipe) {
$old_productivity = null;
if ($intervention->getProject()->getIsAutoPlanified()) {
$old_productivity = $this->getEquipeProductivityByDate($equipe_id, $intervention->getDate()->format("Y-m-d"))["old_productivite"];
}
$this->em->remove($interventionAffectedEquipe);
$this->em->flush();
$this->update_intervention_new_field($intervention);
$interventionAffectedUsers = $this->em->getRepository(InterventionAffectedUsers::class)->findBy(['intervention' => $intervention->getId()]);
$interventionAffectedEquipes = $this->em->getRepository(InterventionAffectedEquipes::class)->findBy(['intervention' => $intervention->getId()]);
if (empty($interventionAffectedUsers) && empty($interventionAffectedEquipes)) {
$this->em->getRepository(InterventionsMateriel::class)->remove_InterventionMateriel($intervention);
$this->em->getRepository(InterventionAffectedEquipes::class)->remove_InterventionAffectedEquipes($intervention);
$this->em->getRepository(InterventionAffectedTags::class)->remove_InterventionAffectedTagsRepository($intervention);
$this->em->getRepository(InterventionImages::class)->remove_InterventionImagesRepository($intervention);
$this->InterventionsRepository->remove_interventions($intervention);
$this->UpdateSuiviTravaux($intervention->getId(), "deleted");
}
$this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
if ($intervention->getProject()->getIsAutoPlanified()) {
$update_productivity_result = $this->update_productivity($equipe_id, $intervention->getDate()->format("Y-m-d"), $intervention->getProject()->getId(), "remove", $old_productivity);
return new Response(json_encode(["new_productivite" => $update_productivity_result["new_productivity"]]));
}
}
return new Response("done");
}
function update_intervention_new_field($intervention)
{
if ($intervention->getClient()->getType() == "professionnel")
$intervention->setClientName(trim($intervention->getClient()->getDenomination()));
elseif ($intervention->getClient()->getType() == "particulier")
$intervention->setClientName($intervention->getClient()->getNom() . ' ' . $intervention->getClient()->getPrenom());
$sql = "
SELECT u.nom ,u.prenom FROM `intervention_affected_users` as iau
left join user as u on u.id=iau.user_id
where iau.intervention_id = " . $intervention->getId();
$request = $this->em->getConnection()->prepare($sql);
$request->execute();
$affected_users = $request->fetchAll();
$technicien = "";
foreach ($affected_users as $key1 => $value1) {
$technicien .= $value1["nom"] . " " . $value1["prenom"] . "|";
}
$intervention->setTechniciensNames($technicien);
$facturation_intervention = "";
if ($intervention->getType() == "forfait_contrat_projets")
$facturation_intervention .= "Forfait Contrat Projets";
elseif ($intervention->getType() == "hors_forfait")
$facturation_intervention .= "Hors forfait";
elseif ($intervention->getType() == "offert")
$facturation_intervention .= "Offert";
if ($intervention->getOffre() && $intervention->getType() != "hors_forfait") {
if ($intervention->getOffre()->getLibelle() != NULL)
$facturation_intervention .= ": " . $intervention->getOffre()->getLibelle();
}
if ($intervention->getFacture() == "facture")
$facturation_intervention .= "- Facturé";
elseif ($intervention->getFacture() == "a_facturer")
$facturation_intervention .= "- A Facturer";
elseif ($intervention->getFacture() == "offre")
$facturation_intervention .= "- Offre";
$intervention->setFacturationLibelle($facturation_intervention);
$this->setDureeIntervention($intervention);
$this->em->flush();
return $intervention->getId();
}
private function getUserOrEquipeProductivityByDate($object_productivity, $object_id, $date, $affected, $isUser = false)
{
$entreprise_id = $this->container->getParameter('entreprise_id');
$entreprise = $this->em->getRepository(Entreprise::class)->find($entreprise_id);
$horaires = $entreprise->getHoraires();
$nb_half_days = 0;
$old_productivite = 0;
$new_productivite = 0;
foreach ($this->days as $day_name => $day) {
if ($horaires[$day_name]["matin"]["closed"] == false)
$nb_half_days++;
if ($horaires[$day_name]["apresMidi"]["closed"] == false)
$nb_half_days++;
}
if ($nb_half_days !== 0) {
$productivite = $object_productivity / $nb_half_days;
$projects = $this->ProjectsRepository->getProductsForUserOrEquipeByDate($object_id, $date, $isUser);
$checkIfDefaultUser = false;
if ($isUser)
$checkIfDefaultUser = $entreprise->getDefaultJointeur()->getId() == $object_id;
if (!$affected) {
if ($checkIfDefaultUser) {
$old_productivite = $productivite;
$new_productivite = $productivite;
} elseif (count($projects) >= 1) {
$old_productivite = $productivite / (count($projects));
$new_productivite = $productivite / (count($projects) + 1);
} else {
$new_productivite = $productivite;
}
} else {
if ($checkIfDefaultUser) {
$old_productivite = $productivite;
$new_productivite = $productivite;
} elseif (count($projects) > 1) {
$old_productivite = $productivite / (count($projects));
$new_productivite = $productivite / (count($projects) - 1);
} else {
$old_productivite = $productivite;
}
}
return array(
"old_productivite" => $old_productivite,
"new_productivite" => $new_productivite,
"projects" => $projects
);
}
return;
}
public function getEquipeProductivityByDate($equipe_id, $date, $affected = false)
{
$equipe = $this->em->getRepository(Equipes::class)->find($equipe_id);
if ($equipe->getProductivite()) {
return $this->getUserOrEquipeProductivityByDate($equipe->getProductivite(), $equipe_id, $date, $affected);
}
return;
}
function CalculeMargeProject($Project, $is_frais = false, $is_main_oeuvre = false, $is_marge = false, $devis_value = null)
{
$taux_frais = $this->calc_taux_frais($Project->getId());
$total_main_oeuvre = $this->total_main_oeuvre($Project->getId());
if ($devis_value) {
$marge = $devis_value - $total_main_oeuvre - $taux_frais;
$Project->setDevis($devis_value);
} else
$marge = $Project->getDevis() - $total_main_oeuvre - $taux_frais;
if ($is_frais)
$Project->setFrais($taux_frais);
if ($is_main_oeuvre)
$Project->setMainOeuvre($total_main_oeuvre);
$Project->setMarge($marge);
$this->em->persist($Project);
$this->em->flush();
if ($is_marge)
return $marge;
return $Project;
}
function UpdateStatProject($Project, $Action = "", $Old_year = null)
{
switch ($Action) {
case "FACTURATION":
$SommeFactureAndSommeRegle = $this->em->getRepository(ProjectFacturation::class)->SommeFactureAndSommeRegle($Project);
$Project->setSommeRegle($SommeFactureAndSommeRegle[0]["Regle"]);
$Project->setSommeFacture($SommeFactureAndSommeRegle[0]["Facture"]);
$Project->setNonRegle($SommeFactureAndSommeRegle[0]["Facture"] - $SommeFactureAndSommeRegle[0]["Regle"]);
break;
case "FRAIS":
$Project = $this->CalculeMargeProject($Project, true);
break;
case "MainOeuvre":
$Project = $this->CalculeMargeProject($Project, false, true);
break;
}
$this->em->persist($Project);
$this->em->flush();
$this->getTotalInterventionProjet($Project->getId(), true);
}
public function getJointeurProductivityByDate($user_id, $date, $affected = false)
{
$user = $this->em->getRepository(User::class)->find($user_id);
if ($user->getProductiviteM2()) {
return $this->getUserOrEquipeProductivityByDate($user->getProductiviteM2(), $user_id, $date, $affected, true);
}
return;
}
public function getPrefixUser($user)
{
$prefix_user = "";
if ($user->getTache() && $user->getTache() === "Jointeur")
$prefix_user = "Jointeur ";
return $prefix_user;
}
public function getPageLink($list, $vue_graphique, $pageType)
{
$user = $this->tokenStorage->getToken()->getUser();
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();
$urlInSession = $session->get('page-type', []);
if (in_array("ROLE_vue_details", $user->getRoles()) && !in_array("ROLE_vue_graphique", $user->getRoles()))
return $list;
else if (!in_array("ROLE_vue_details", $user->getRoles()) && in_array("ROLE_vue_graphique", $user->getRoles())) {
if ($pageType == "Interventions" && $urlInSession && array_key_exists("InterventionsType", $urlInSession))
return $vue_graphique . "?type=" . $urlInSession["InterventionsType"];
return $vue_graphique;
} else {
if ($urlInSession && array_key_exists($pageType, $urlInSession) && $urlInSession[$pageType] == "graphique") {
if ($pageType == "Interventions" && $urlInSession && array_key_exists("InterventionsType", $urlInSession))
return $vue_graphique . "?type=" . $urlInSession["InterventionsType"];
else
return $vue_graphique;
}
return $list;
}
}
public function get_type_and_size_file($path, $id)
{
$info_documents = array();
$fileSize = 0;
$imageExtensions = ['jpg', 'jpeg', 'png', 'gif'];
$urlParts = parse_url($path);
if (isset($urlParts['path']))
$path = $urlParts['path'];
$pathWithoutFirstSlash = ltrim($path, '/');
if (file_exists($pathWithoutFirstSlash))
$fileSize = filesize($pathWithoutFirstSlash);
$fileExtension = $this->get_extension_file($path);
$info_documents[$id] = [
'type' => in_array(strtolower($fileExtension), $imageExtensions) ? 'image' : 'document',
'size' => $fileSize
];
return $info_documents;
}
function setProjectSuiviTravaux($project_id, $item_id, $date, $heure_reel, $projectSuiviTravaux_id = null, $isEquipe = false)
{
$project = $this->em->getRepository(Projects::class)->find($project_id);
$intervenant = null;
if (!$isEquipe)
$intervenant = $this->em->getRepository(User::class)->find($item_id);
else
$equipe = $this->em->getRepository(Equipes::class)->find($item_id);
if ($projectSuiviTravaux_id) {
$projectSuiviTravaux = $this->em->getRepository(ProjectSuiviTravaux::class)->find($projectSuiviTravaux_id);
if ($projectSuiviTravaux->getHeureReel() != $heure_reel) {
$taux_minute = $projectSuiviTravaux->getTauHoraire() / 60;
$taux_minute_project = $projectSuiviTravaux->getUserTauHoriare() / 60;
$projectSuiviTravaux->setHeureReel($heure_reel);
$projectSuiviTravaux->setHeuresUser($heure_reel);
$projectSuiviTravaux->setHeuresClient($heure_reel);
$projectSuiviTravaux->setSommeUser($heure_reel * $taux_minute);
$projectSuiviTravaux->setSommeClient($heure_reel * $taux_minute_project);
}
} else {
$projectSuiviTravaux = new ProjectSuiviTravaux();
$projectSuiviTravaux->setProject($project);
$projectSuiviTravaux->setUser($intervenant);
$projectSuiviTravaux->setDate($date);
if ($isEquipe) {
$projectSuiviTravaux->setEquipe($equipe);
if ($this->em->getRepository(Equipes::class)->getTauxHoraire($equipe->getId())) {
$taux = $this->em->getRepository(Equipes::class)->getTauxHoraire($equipe->getId())['taux_horaire'] ?? 0;
$projectSuiviTravaux->setTauHoraire($taux);
$taux_minute = $taux / 60;
} else {
$projectSuiviTravaux->setTauHoraire(0);
$taux_minute = 0;
}
} else {
$projectSuiviTravaux->setUser($intervenant);
if ($intervenant->getTauxHoraire()) {
$projectSuiviTravaux->setTauHoraire($intervenant->getTauxHoraire());
$taux_minute = $intervenant->getTauxHoraire() / 60;
} else {
$projectSuiviTravaux->setTauHoraire(0);
$taux_minute = 0;
}
}
if ($project->getTauxHoraire()) {
$projectSuiviTravaux->setUserTauHoriare($project->getTauxHoraire());
$taux_minute_project = $project->getTauxHoraire() / 60;
} else {
$projectSuiviTravaux->setUserTauHoriare(0);
$taux_minute_project = 0;
}
$projectSuiviTravaux->setHeuresUser($heure_reel);
$projectSuiviTravaux->setHeureReel($heure_reel);
$projectSuiviTravaux->setHeuresClient($heure_reel);
$projectSuiviTravaux->setSommeUser($heure_reel * $taux_minute);
$projectSuiviTravaux->setSommeClient($heure_reel * $taux_minute_project);
$this->em->persist($projectSuiviTravaux);
}
$this->em->flush();
}
public function heures_reels($data, $type)
{
$heures_reels = [];
$items = isset($data[$type]) ? $data[$type] : (isset($data['users']) ? $data['users'] : $data['equipes']);
$interventions = isset($data["equipes_interventions"]) ? $data["equipes_interventions"] : (isset($data["interventions"]) ? $data["interventions"] : []);
foreach ($items as $item) {
$id_item = $item['id'];
$minutes = 0;
if (isset($interventions[$id_item])) {
foreach ($interventions[$id_item] as $intervention) {
$array_times = explode(":", $intervention["duree_intervention"]);
$minutes += ($array_times[0] * 60 + $array_times[1]);
}
$heures_reels[$id_item] = $minutes;
}
}
return $heures_reels;
}
public function addSuiviTravauxProject($project_id, $item, $intervention, $isEquipe)
{
$projectSuiviTravaux = $this->em->getRepository(ProjectSuiviTravaux::class)->findByProjectAndUserAndDate($project_id, $item->getId(), $intervention->getDate()->format("Y-m-d"));
$projectSuiviTravaux_id = $projectSuiviTravaux ? $projectSuiviTravaux[0]->getId() : null;
$dataIntervention = clone $intervention->getDate();
$data = $this->getProjectIntervenantsInterventions($project_id, $dataIntervention);
$heures_reels = $this->heures_reels($data, $isEquipe ? "equipes" : "users");
$heures_reel = isset($heures_reels[$item->getId()]) ? $heures_reels[$item->getId()] : 0;
$this->setProjectSuiviTravaux($project_id, $item->getId(), $intervention->getDate(), $heures_reel, $projectSuiviTravaux_id, $isEquipe);
}
public function UpdateSuiviTravaux($intervention_id, $action, $params = [])
{
$intervention = $this->em->getRepository(Interventions::class)->find($intervention_id);
if (!empty($intervention)) {
switch ($action) {
case "deleted":
$filter = [
'project' => $intervention->getProject(),
'date' => $intervention->getDate()
];
if (isset($params['user_id']))
$filter['user'] = $params['user_id'];
$ProjectSuiviTravauxList = $this->em->getRepository(ProjectSuiviTravaux::class)->findby($filter);
foreach ($ProjectSuiviTravauxList as $ProjectSuiviTravaux) {
if ($intervention->getDuree() >= $ProjectSuiviTravaux->getHeureReel())
$this->em->remove($ProjectSuiviTravaux);
else {
$newDuree = $ProjectSuiviTravaux->getHeureReel() - $intervention->getDuree();
$oldDuree = $ProjectSuiviTravaux->getHeureReel();
$ProjectSuiviTravaux->setHeureReel($newDuree);
$ProjectSuiviTravaux->setHeuresUser($ProjectSuiviTravaux->getHeuresUser() - $intervention->getDuree());
$ProjectSuiviTravaux->setHeuresClient($ProjectSuiviTravaux->getHeuresClient() - $intervention->getDuree());
$ProjectSuiviTravaux->setSommeUser($this->getNewsPrice($newDuree, $oldDuree, $ProjectSuiviTravaux->getSommeUser()));
$ProjectSuiviTravaux->setSommeClient($this->getNewsPrice($newDuree, $oldDuree, $ProjectSuiviTravaux->getSommeUser()));
}
$this->em->flush();
}
break;
default:
break;
}
if (!empty($intervention->getProject()))
$this->UpdateStatProject($intervention->getProject(), "MainOeuvre");
}
return 'done';
}
function getNewsPrice($newDuree, $oldDuree, $oldPrice)
{
$newPrice = round((($oldPrice / $oldDuree) * $newDuree), 2);
return $newPrice;
}
function UpdateUserSuiviTravaux($user_id)
{
$user = $this->em->getRepository(User::class)->find($user_id);
$ProjectSuiviTravauxList = $this->em->getRepository(ProjectSuiviTravaux::class)->findby(['user' => $user_id]);
foreach ($ProjectSuiviTravauxList as $ProjectSuiviTravaux) {
$ProjectSuiviTravaux->setTauHoraire($user->getTauxHoraire());
$ProjectSuiviTravaux->setSommeUser(round($user->getTauxHoraire() * ($ProjectSuiviTravaux->getHeuresUser() / 60)), 2);
$this->em->flush();
$this->UpdateStatProject($ProjectSuiviTravaux->getProject(), "MainOeuvre");
}
return 'done';
}
public function getEntrepriseClosedDays()
{
$entreprise_id = $this->container->getParameter('entreprise_id');
$entreprise = $this->em->getRepository(Entreprise::class)->find($entreprise_id);
$horaires = $entreprise->getHoraires();
$d = 1;
$closed_days = array();
foreach ($horaires as $day) {
if ($day["matin"]["closed"] == true && $day["apresMidi"]["closed"] == true)
$closed_days[] = $d % 7;
$d++;
}
return $closed_days;
}
}