<?php
namespace App\Controller\Api\Prive;
use App\Entity\Appareil;
use App\Entity\Appel;
use App\Entity\Appelstatut;
use App\Entity\Campagne;
use App\Entity\Campagnecollaborateur;
use App\Entity\Campagneprospect;
use App\Entity\Cleaningdb;
use App\Entity\Cleaningdbcollaborateur;
use App\Entity\Commentaire;
use App\Entity\Contact;
use App\Entity\Fichier;
use App\Entity\Prospect;
use App\Entity\Prospectdetail;
use App\Entity\Rdv;
use App\Entity\Utilisateur;
use App\Helpers\Mailing;
use Doctrine\ORM\Query;
use Doctrine\ORM\Query\ResultSetMapping;
use phpDocumentor\Reflection\Types\Boolean;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/espaceagent")
*/
class ApiEspaceagentController extends ApiController
{
public function saveTrace(string $trace) {
//file_put_contents("text.json","azizo");
// save trace
$utilisateur = $this->getUtilisateurConnecte()->getId();
$today = date("Ymd");
$repertoire = "logs/".$utilisateur;
if (!is_dir($repertoire)) {
$filesystem = new Filesystem();
$filesystem->mkdir($repertoire, 0700);
}
$text = PHP_EOL."---------------------".date("Y-m-d H:i:s")."------------------------------".PHP_EOL.$trace;
file_put_contents($repertoire.'/log_'.$today.'.txt', $text , FILE_APPEND | LOCK_EX);
}
/**
* @Route("/nextprospect", name="api_espaceagent_nextprospect", methods={"POST"})
* @param Request $request
* @return JsonResponse
*/
public function nextprospect(Request $request)
{
$data = json_decode($request->getContent(), true);
$id = $data['idCampagne'];
$getToutRappelPrive = $data['getRappelPrive'];
$getToutRappelPartage = $data['getRappelPartage'];
$trace = "Input : ".json_encode($data).PHP_EOL;
// Chercher les campagnesprospect utilisateur
/** @var Campagne $campagne */
$campagne = $this->em->getRepository(Campagne::class)->find($id);
if (!$campagne) {
return $this->apiKo("Campagne non trouvée !!");
}
/** @var Campagneprospect $campagneprospect */
$campagneprospect = $this->getCampagneprospect($campagne,$getToutRappelPrive,$getToutRappelPartage);
if (!$campagneprospect) {
$trace .= "OutPut : KO";
return $this->apiKo("Pas de prospect trouvé. Tous les prospects de la campagne ont été traités !");
}
$data = [
"id" => $campagneprospect->getId(),
"idCampagne" => $campagneprospect->getCampagne() ? $campagneprospect->getCampagne()->getId() : "",
"idAppelStatut" => $campagneprospect->getAppelstatut() ? $campagneprospect->getAppelstatut()->getId() : "",
"rappelprive" => $campagneprospect->getRappelprive(),
"daterappel" => $campagneprospect->getDaterappel(),
"idUtilisateur" => $campagneprospect->getUtilisateur() ? $campagneprospect->getUtilisateur()->getId():""
];
$trace .= "OutPut : ".json_encode($data).PHP_EOL;
$this->saveTrace($trace);
return $this->apioK($campagneprospect);
}
/**
* @Route("/enregistrerappel", name="api_espaceagent_enregistrerappel", methods={"POST"})
* @param Request $request
* @return JsonResponse
*/
public function enregistrerappel(Request $request)
{
$data = json_decode($request->getContent(), true);
try {
if (!isset($data['prospect'])) {
return $this->apiKo("Prospect non trouvé !!");
}
if (!isset($data['appelsatut'])) {
return $this->apiKo("Statut appel non trouvé !!");
}
if (!isset($data['campagneprospect'])) {
return $this->apiKo("Campagne prospect non trouvé !!");
}
// 1. Update info prospect
$prospect = $this->chercherProspect($data['prospect']);
$prospect = $this->saveProspect($prospect, $data['prospect']);
if (!$prospect instanceof Prospect) {
return $this->apiKo($prospect);
}
/*
campagneprospect: {id: this.campagneprospect.id},
prospect: this.prospect,
commentaire: this.commentaire,
appelsatut: {id: this.appelstatutSelected.id},
daterappel: this.dateRappel,
estpartagerappel: this.estPartageRappel,
affectera: {id: affecterA}, // affecter le rappel à
dureeappel: this.timerSecond,
contact: this.contactSelected,
numerotelephone: this.numerotelephone,
daterdv: this.dateRdv
*/
/** @var Utilisateur $utilisateur */
$utilisateur = $this->getUtilisateurConnecte();
/** @var Appelstatut $appelstatut */
$appelstatut = $this->getObject(Appelstatut::class, $data['appelsatut']['id']);
$numerotelephone = "";
if (isset($data['numerotelephone'])) {
$numerotelephone = $data['numerotelephone'];
}
// 2. Commentaires
/** @var Commentaire $commentaire */
$commentaire = new Commentaire();
$commentaire->setProspect($prospect);
$commentaire->setUtilisateur($utilisateur);
$commentaire->setDate(new \DateTime());
$commentaire->setMessage($data['commentaire']);
$this->em->persist($commentaire);
$this->em->flush();
$commentairereponsable = new Commentaire();
$commentairereponsable->setDate(new \DateTime());
$commentairereponsable->setMessage("");
$this->em->persist($commentairereponsable);
$this->em->flush();
// 3. Update campagne prospect
/** @var Campagneprospect $campagneprospect */
$campagneprospect = $this->getObject(Campagneprospect::class, $data['campagneprospect']['id']);
// contact !
if (isset($data['contact'])) {
$historique = $campagneprospect->getHistorique();
if (is_null($historique) || $historique == "null") {
$historique = array([]);
}
$historique[] = [
"contact" => $data['contact']['id'],
"appelstatut" => $appelstatut->getLibelle()
];
$campagneprospect->setHistorique($historique);
}
$campagneprospect->setCommentaire($data['commentaire']);
$campagneprospect->setAppelstatut($appelstatut);
$campagneprospect->setRappelprive(2);
$campagneprospect->setTraitementdate(new \DateTime());
$campagneprospect->setTraitementencore(0);
$campagneprospect->setTraitementpar($utilisateur);
$campagneprospect->setUtilisateur($utilisateur); // Par defaut : affecté à utilisateur connecté
$campagneprospect->setDaterappel(null);
// TRAITER LE CAS RAPPELL
if ($appelstatut->getRappel() && isset($data['estpartagerappel']) && isset($data['daterappel'])) {
$campagneprospect->setRappelprive(!$data['estpartagerappel']);
$campagneprospect->setDaterappel(new \DateTime($data['daterappel']));
// cas rappel privé avec affectation à un autre collaborateur
if(!$data['estpartagerappel'] == true) {
$affecterA = 0;
if (isset($data['affectera']) && isset($data['affectera']['id'])) {
$affecterA = $data['affectera']['id'];
}
if ($affecterA > 0 && $affecterA != $utilisateur->getId()) {
$collaborateur = $this->getObject(Utilisateur::class,$affecterA);
if($collaborateur){
$campagneprospect->setUtilisateur($collaborateur);
}
}
}
}
$this->em->persist($campagneprospect);
// 3. Historique des appels
/** @var Appel $appel */
$appel = new Appel();
$appel->setUtilisateur($utilisateur);
$appel->setCampagneprospect($campagneprospect);
$appel->setDateappel(new \DateTime());
$appel->setAppelstatut($appelstatut);
$appel->setDureeappel($data['dureeappel']);
$appel->setNumerotelephone($numerotelephone);
if ($commentaire->getId() > 0) {
$appel->setCommentaire($commentaire);
}
$this->em->persist($appel);
// TRAITER LE CAS RDV
if ($appelstatut->getRdv() && isset($data['daterdv'])) {
$rdv = new Rdv();
$rdv->setUtilisateur($utilisateur);
$rdv->setProspect($prospect);
$rdv->setCampagne($campagneprospect->getCampagne());
$rdv->setDaterdv(new \DateTime($data['daterdv']));
$rdv->setDatecreation(new \DateTime());
$rdv->setDatemodification(new \DateTime());
$rdv->setCommentaire($commentaire);
$rdv->setCommentaireresponsable($commentairereponsable);
// contact !
if (isset($data['contact']) && isset($data['contact']['id'])) {
/** @var Contact $contact */
$contact = $this->getObject(Contact::class, $data['contact']['id']);
if ($contact) {
$rdv->setContact($contact);
}
}
$this->em->persist($rdv);
// Notification
(new Mailing($this->mailer, $this->templating))->notificationstatutrdv($rdv);
}
//TRAITER LE CAS FICHEQUALIFIE
if ($appelstatut->getFichequalifie() || $appelstatut->getFichearequalifie()) {
// Transférer fiche vers campagne cible
$campagnecibleId = $campagneprospect->getCampagne()->getCampagnecible();
if($campagnecibleId>0){
$campagnecible = $this->getObject(Campagne::class,$campagnecibleId);
if($campagnecible){
// verifier l'existance prospect dans la campagne
/** @var Campagneprospect $campagneprospectCible */
$campagneprospectCible = $this->em->getRepository(Campagneprospect::class)->findOneBy(
["prospect" => $prospect,"campagne" => $campagnecible]
);
if(!$campagneprospectCible){
$campagneprospectCible = new Campagneprospect();
$campagneprospectCible->setProspect($prospect);
$campagneprospectCible->setCampagne($campagnecible);
}else{
$campagneprospectCible->setAppelstatut(null);
$campagneprospectCible->setUtilisateur(null);
$campagneprospectCible->setRappelprive(-1);
$campagneprospectCible->setDaterappel(null);
}
$campagneprospectCible->setCommentaire($campagneprospect->getCommentaire());
$this->em->persist($campagneprospectCible);
}
}
}
// Flush modification dans la bdd
$this->em->flush();
return $this->apioK("1");
} catch (\Exception $e) {
//throw $e;
return $this->apiKo($e->getMessage());
}
}
/////////////////////////////////////// ACTION CLEANING DB ///////////////////////////
/**
* @Route("/activecleaningdb", name="api_espaceagent_activecleaningdb", methods={"GET"})
* @return JsonResponse
*/
public function activecleaningdb()
{
/** @var Cleaningdbcollaborateur $cleaningCollaborateur */
$cleaningCollaborateur = $this->em->getRepository(Cleaningdbcollaborateur::class)->findOneBy(
[
"collaborateur" => $this->getUtilisateurConnecte()->getId()
]
);
if($cleaningCollaborateur == null){
return $this->apioK(false);
}
return $this->apioK(true);
}
/**
* @Route("/verifierdoublon/{id}", name="api_espaceagent_verifierdoublon", methods={"GET"})
* @param int $id
* @return JsonResponse
*/
public function verifierdoublon(int $id)
{
if($id == null && $id<=0){
return $this->apiOk([]);
}
$sql = "SELECT
p.id as id,
p.doublonSiret as siret,
p.doublonStandard as standard
FROM prospectdoublon AS p
WHERE p.id NOT IN (SELECT c.uid FROM cleaningdb as c WHERE c.action <>0)
AND (p.id like '%-".$id."' OR p.id like '".$id."-%') LIMIT 1";
$rsm = new ResultSetMapping();
$rsm->addScalarResult('id','id');
$rsm->addScalarResult('siret','siret');
$rsm->addScalarResult('standard','standard');
$items = $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
$reponse = [];
foreach ($items as $item){
$reponse = [
"estdoublon" => true,
"standard" => (int) $item["standard"],
"siret" => (int) $item["siret"],
"uid" => $item["id"]
];
}
return $this->apiOk($reponse);
}
/**
* @Route("/ouvrirdoublon/{uid}", name="api_espaceagent_ouvrirdoublon", methods={"GET"})
* @param string $uid
* @return JsonResponse
*/
public function ouvrirdoublon(string $uid)
{
if(!isset($uid)){
return $this->apiOk([]);
}
/** @var Utilisateur $utilisateur */
$utilisateur = $this->getUtilisateurConnecte();
/** @var Cleaningdb $cleaningdb */
$cleaningdb = $this->em->getRepository(Cleaningdb::class)->findOneBy(
[
"uid" =>$uid
]
);
if($cleaningdb != null){
$cleaningdb->setUtilisateur($utilisateur);
$this->em->persist($cleaningdb);
$this->em->flush();
}else{
$sql = "SELECT
p.id as id,
p.societe as societe,
p.siret as siret,
p.standard as standard
FROM prospectdoublon AS p
WHERE p.id = '".$uid."'
LIMIT 1";
$rsm = new ResultSetMapping();
$rsm->addScalarResult('id','id');
$rsm->addScalarResult('societe','societe');
$rsm->addScalarResult('siret','siret');
$rsm->addScalarResult('standard','standard');
$items = $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
foreach ($items as $item){
$cleaningdb = $this->em->getRepository(Cleaningdb::class)->findOneBy([
"uid" => $item["id"]
]);
if($cleaningdb == null){
$cleaningdb = new Cleaningdb();
$cleaningdb->setAction(0);
$cleaningdb->setUtilisateur($utilisateur);
$cleaningdb->setUid($item["id"] );
$cleaningdb->setSociete($item["societe"] );
$cleaningdb->setSiret($item["siret"] );
$cleaningdb->setStandard($item["standard"] );
$this->em->persist($cleaningdb);
$this->em->flush();
}
}
}
if($cleaningdb != null && $cleaningdb->getId()>0){
// retourn les prospect doublon
$ids = explode("-",$cleaningdb->getUid());
/** @var Prospect[] $prospects */
$prospects = $this->em->getRepository(Prospect::class)->findBy([
"id" => $ids
]);
$data = [
"id" => $cleaningdb->getId(),
"prospects" => $prospects,
"erreurMessage" => "",
"erreur" => false,
];
}else{
$data = [
"id" => "",
"prospects" => [],
"erreurMessage" => "Pas de prospect doublons trouvé !",
"erreur" => true,
];
}
return $this->apiOk($data);
}
/**
* @Route("/nextprospectdoublon", name="api_espaceagent_nextprospectdoublon", methods={"POST"})
* @param Request $request
* @return JsonResponse
*/
public function nextprospectdoublon(Request $request)
{
/** @var Utilisateur $utilisateur */
$utilisateur = $this->getUtilisateurConnecte();
// Recuperer Next Element à traiter
/** @var Cleaningdb $cleaningdb */
$cleaningdb = $this->em->getRepository(Cleaningdb::class)->findOneBy(
[
"utilisateur" => $utilisateur->getId(),
"action" => 0
]
);
if($cleaningdb == null){
$sql = "SELECT
p.id as id,
p.societe as societe,
p.siret as siret,
p.standard as standard
FROM prospectdoublon AS p
WHERE p.id NOT IN (SELECT c.uid FROM cleaningdb AS c )
LIMIT 2";
$rsm = new ResultSetMapping();
$rsm->addScalarResult('id','id');
$rsm->addScalarResult('societe','societe');
$rsm->addScalarResult('siret','siret');
$rsm->addScalarResult('standard','standard');
$items = $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
foreach ($items as $item){
$cleaningdb = $this->em->getRepository(Cleaningdb::class)->findOneBy([
"uid" => $item["id"]
]);
if($cleaningdb == null){
$cleaningdb = new Cleaningdb();
$cleaningdb->setAction(0);
$cleaningdb->setUtilisateur($utilisateur);
$cleaningdb->setUid($item["id"] );
$cleaningdb->setSociete($item["societe"] );
$cleaningdb->setSiret($item["siret"] );
$cleaningdb->setStandard($item["standard"] );
$this->em->persist($cleaningdb);
$this->em->flush();
}
}
}
if($cleaningdb != null && $cleaningdb->getId()>0){
// retourn les prospect doublon
$ids = explode("-",$cleaningdb->getUid());
/** @var Prospect[] $prospects */
$prospects = $this->em->getRepository(Prospect::class)->findBy([
"id" => $ids
]);
$data = [
"id" => $cleaningdb->getId(),
"prospects" => $prospects,
"erreurMessage" => "",
"erreur" => false,
];
}else{
$data = [
"id" => $cleaningdb->getId(),
"prospects" => [],
"erreurMessage" => "Pas de prospect doublons trouvé !",
"erreur" => true,
];
}
return $this->apiOk($data);
}
/**
* @Route("/enregistrerdoublon", name="api_espaceagent_enregistrerdoublon", methods={"POST"})
* @param Request $request
* @return JsonResponse
*/
public function enregistrerdoublon(Request $request)
{
$data = json_decode($request->getContent(), true);
if(!isset($data["id"])
|| !isset($data["deletedProspects"])
|| !isset($data["savedProspects"])
|| !isset($data["prospectdetail"])
|| !isset($data["prospect"])
|| !isset($data["appreils"])
|| !isset($data["contacts"])
){
return $this->apiKo("Object des données n'est pas valide !");
}
$id = $data["id"];
/** @var Cleaningdb $cleaningdb */
$cleaningdb = $this->getObject(Cleaningdb::class,$id);
if($cleaningdb == null){
return $this->apiKo("Object des données n'est pas valide !");
}
//return $this->apiOk("OK");// a supprimer
$this->em->getConnection()->beginTransaction();
try {
//1. update prospect gardé
$prospect = $this->getObject(Prospect::class,$data["prospect"]["id"]);
$result = $this->saveProspect($prospect,$data["prospect"]);
if(!($result instanceof Prospect)){
throw new \Exception($result);
}
$prospectdetail = $this->saveProspectdetail($prospect, $data["prospectdetail"]);
if(!($prospectdetail instanceof Prospectdetail)){
throw new \Exception($prospectdetail);
}
//2. archivé les doublons
$ids = $data["deletedProspects"];
$historique = [];
foreach ($ids as $id){
/** @var Prospect $prospectArchive */
$prospectArchive = $this->getObject(Prospect::class,$id);
if($prospectArchive != null){
$historique = $this->ArchiverProspect($prospect,$prospectArchive);
}
}
if($historique instanceof \Exception){
throw $historique;
}
$cleaningdb->setHistorique($historique);
$this->em->getConnection()->commit();
$cleaningdb->setDeletedObjects($data["deletedProspects"]);
$cleaningdb->setSavedObjects($data["savedProspects"]);
$cleaningdb->setAction(1);
return $this->apioK("1");
} catch (\Exception $e) {
$this->em->getConnection()->rollBack();
$cleaningdb->setAction(-1);
$cleaningdb->setCommentaire($e->getMessage());
return $this->apiKo($e->getMessage());
} finally {
$this->em->persist($cleaningdb);
$this->em->flush();
}
}
/**
* @param int $id
*/
public function ArchiverProspect(Prospect $prospect,Prospect $prospectArchive){
$historique = [];
$histo = [];
try{
//1. Transfert Contacts
/** @var Contact[] $contacts */
$contacts = $this->em->getRepository(Contact::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Contact $contact */
foreach ($contacts as $contact){
$contact->setProspect($prospect);
$this->em->persist($contact);
$histo[] = ["id" => $contact->getId()];
}
$historique[] = ["contacts" => $histo];
$histo = [];
//2. Appareils
/** @var Appareil[] $appareils */
$appareils = $this->em->getRepository(Appareil::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Appareil $appareil */
foreach ($appareils as $appareil){
$appareil->setProspect($prospect);
$this->em->persist($appareil);
$histo[] = ["id" => $appareil->getId()];
}
$historique[] = ["appareils" => $histo];
$histo = [];
//3. CampagneProspect
/** @var Campagneprospect[] $campagneprospects */
$campagneprospects = $this->em->getRepository(Campagneprospect::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Campagneprospect $campagneprospect */
foreach ($campagneprospects as $campagneprospect){
$campagneprospect->setProspect($prospect);
$this->em->persist($campagneprospect);
$histo[] = ["id" => $campagneprospect->getId()];
}
$historique[] = ["campagneprospects" => $histo];
$histo = [];
//4.Commentaires
/** @var Commentaire[] $commentaires */
$commentaires = $this->em->getRepository(Commentaire::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Commentaire $commentaire */
foreach ($commentaires as $commentaire){
$commentaire->setProspect($prospect);
$this->em->persist($commentaire);
$histo[] = ["id" => $commentaire->getId()];
}
$historique[] = ["commentaires" => $histo];
$histo = [];
//5. Fichiers
/** @var Fichier[] $fichiers */
$fichiers = $this->em->getRepository(Fichier::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Fichier $fichier */
foreach ($fichiers as $fichier){
$fichier->setProspect($prospect);
$this->em->persist($fichier);
$histo[] = ["id" => $fichier->getId()];
}
$historique[] = ["fichiers" => $histo];
$histo = [];
//6.Rdv
/** @var Rdv[] $rdvs */
$rdvs = $this->em->getRepository(Rdv::class)->findBy(
["prospect" => $prospectArchive->getId()]
);
/** @var Rdv $rdv */
foreach ($rdvs as $rdv){
$rdv->setProspect($prospect);
$this->em->persist($rdv);
$histo[] = ["id" => $rdv->getId()];
}
$historique[] = ["rdvs" => $histo];
// Marquer prospect comme supprimé logiquement
$prospectArchive->setActive(2);
$this->em->persist($prospectArchive);
return [
"prospect" => $prospect->getId(),
"prospectArchive" => $prospectArchive->getId(),
"historique" => $historique,
];
}catch (\Exception $e){
return $e;
}
}
/*
* #############################STATS##############################
*/
/**
* @Route("/mesobjectifs/{id}", name="api_espaceagent_mesobjectifs", methods={"GET"})
* @param int $id
* @return JsonResponse
*/
public function mesobjectifs(int $id)
{
// Chercher les campagnesprospect utilisateur
/** @var Campagne $campagne */
$campagne = $this->em->getRepository(Campagne::class)->find($id);
if (!$campagne) {
return $this->apiKo("Campagne non trouvée !!");
}
/*
* SELECT
cam.id AS id,
cam.objectifagent AS objectif,
COUNT(rdv.id) AS realise
FROM
rdv AS rdv
left join campagne AS cam ON cam.id = rdv.campagne_id
LEFT JOIN campagnecollaborateur AS camcol ON camcol.campagne_id = cam.id
WHERE camcol.collaborateur_id=1
GROUP BY cam.id
*/
$realise = 0;
$objectif = 10;
$data = [
"aujourdhui" => [
"realise" => $realise,
"objectif" => $objectif
],
"cemois" => [
"realise" => 15,
"objectif" => 30
],
];
return $this->apioK($data);
}
/**
* @Route("/mesappels", name="api_espaceagent_mesappels", methods={"GET"})
* @return JsonResponse
*/
public function mesappels()
{
$data = [];
return $this->apioK($data);
}
/*
* #############################AUTRES##############################
*/
/**
* @param Campagne $campagne
* @return object|null
*/
public function getCampagneprospect(Campagne $campagne, bool $getToutRappelPrive = false,bool $getToutRappelPartage=false): ?object
{
// Débloquer les fichiers réservé pour un collaborateur +24heure
$yesterday = strtotime('-1 day');
$sqlBloque = "
UPDATE campagneprospect
SET traitementencore = 0
WHERE date_format(traitementdate,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s",$yesterday)."'
and traitementencore > 0
";
//file_put_contents("temp.json",$sqlBloque);
try {
$con = $this->em->getConnection();
$con->executeQuery($sqlBloque);
} catch (\Exception $e) {
return $this->apiKo($e->getMessage());
}
/** @var Utilisateur $utilisateur */
$utilisateur = $this->getUtilisateurConnecte();
$idsCampagneRappelPrive = "(".$campagne->getId(); // Rappel Privés
$idsCampagneRappelPartage = "(".$campagne->getId(); // Rappel Partagé
// Si $getToutRappelPrive ou $getToutRappelPartage ===> alors :
if($getToutRappelPrive == true || $getToutRappelPartage == true) {
$campagnecollaborateurs = $this->em->getRepository(Campagnecollaborateur::class)->findBy(
[
"collaborateur" => $utilisateur,
]
);
/** @var Campagnecollaborateur $campagnecollaborateur */
foreach($campagnecollaborateurs as $campagnecollaborateur){
if($campagnecollaborateur->getCampagne()->getActive() == 1){
if($getToutRappelPrive == true) {
$idsCampagneRappelPrive .=",".$campagnecollaborateur->getCampagne()->getId();
}
if($getToutRappelPartage == true) {
$idsCampagneRappelPartage .=",".$campagnecollaborateur->getCampagne()->getId();
}
}
}
}
$idsCampagneRappelPrive .=")";
$idsCampagneRappelPartage .=")";
//1. Chercher Rappel Privé
$sql = "
SELECT
campagneprospect
FROM " . Campagneprospect::class . " as campagneprospect
LEFT JOIN " . Appelstatut::class . " as appelstatut WITH campagneprospect.appelstatut = appelstatut.id
WHERE date_format(campagneprospect.daterappel,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s")."'
AND appelstatut.rappel=true
AND campagneprospect.rappelprive = 1 AND campagneprospect.utilisateur = ".$utilisateur->getId()."
AND campagneprospect.campagne in ".$idsCampagneRappelPrive."
ORDER BY campagneprospect.rappelprive desc,campagneprospect.daterappel asc
";
//file_put_contents("RappelPriv.txt",$sql);
/** @var Query $query */
$query = $this->em->createQuery($sql);
$query->setFirstResult(0);
$query->setMaxResults(1);
$campagneprsopect = $query->getOneOrNullResult();
if ($campagneprsopect) {
return $campagneprsopect;
}
//2. Chercher Rappel Partagé
$sql = "
SELECT
campagneprospect
FROM " . Campagneprospect::class . " as campagneprospect
LEFT JOIN " . Appelstatut::class . " as appelstatut WITH campagneprospect.appelstatut = appelstatut.id
WHERE date_format(campagneprospect.daterappel,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s")."'
AND appelstatut.rappel=true
AND campagneprospect.campagne in ".$idsCampagneRappelPartage."
AND campagneprospect.rappelprive = 0
AND campagneprospect.traitementencore IN (0,".$utilisateur->getId().")
ORDER BY campagneprospect.rappelprive desc,campagneprospect.daterappel asc
";
//file_put_contents("RappelPartag.txt",$sql);
/** @var Query $query */
$query = $this->em->createQuery($sql);
$query->setFirstResult(0);
$query->setMaxResults(1);
/** @var Campagneprospect $campagneprsopect */
$campagneprsopect = $query->getOneOrNullResult();
if ($campagneprsopect) {
$campagneprsopect->setUtilisateur($utilisateur);
$campagneprsopect->setTraitementdate(new \DateTime());
$campagneprsopect->setTraitementencore($utilisateur->getId());
$this->em->persist($campagneprsopect);
$this->em->flush();
return $campagneprsopect;
}
//3. Chercher next prospect
$campagneprsopects = $this->em->getRepository(Campagneprospect::class)->findBy(
[
"campagne" => $campagne,
"utilisateur" => $utilisateur,
"rappelprive" => -1
],
[
"id" => "ASC"
]
);
if (!$campagneprsopects || sizeof($campagneprsopects) == 0) {
// affecter campagneprospect au utilisateur
return $this->autoAffectCampagneprospect($campagne, $utilisateur);
}
// Si reste un seul campagneprospect, alors ajouter +5 !
if (sizeof($campagneprsopects) == 1) {
$this->autoAffectCampagneprospect($campagne, $utilisateur);
}
// returner le premier dans la liste
return $campagneprsopects[0];
}
/**
* @param Campagne $campagne
* @param Utilisateur $utilisateur
* @return Campagneprospect|null
*/
public function autoAffectCampagneprospect(Campagne $campagne, Utilisateur $utilisateur): ?Campagneprospect
{
$campagneprsopectFirst = null;
$campagneprsopects = $this->em->getRepository(Campagneprospect::class)->findBy(
[
"campagne" => $campagne,
"utilisateur" => null,
"rappelprive" => -1
],
[
"id" => "ASC"
],
5
);
// si pas campagneprospect trouvé alors return null
if (sizeof($campagneprsopects) == 0) {
return null;
}
/** @var Campagneprospect $campagneprsopect */
foreach ($campagneprsopects as $campagneprsopect) {
$campagneprsopect->setUtilisateur($utilisateur);
$this->em->persist($campagneprsopect);
if ($campagneprsopectFirst == null) {
$campagneprsopectFirst = $campagneprsopect;
}
}
$this->em->flush();
return $campagneprsopectFirst;
}
}