<?php
namespace App\Controller;
use DateTime;
use App\Entity\Config;
use App\Entity\Emails;
use App\Form\AvisType;
use App\Form\ChatType;
use App\Services\Mercure;
use App\Services\CallApiTab;
use Symfony\Component\HttpFoundation\Request;
use App\Services\CallApiServices;
use Doctrine\DBAL\Driver\IBMDB2\Result;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomeController extends AbstractController
{
public function __construct(CallApiTab $callApiTab)
{
$this->endpoint = $callApiTab->endpoint();
}
/**
* @Route("/", name="app_home")
*/
public function index(): Response
{
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
]);
}
/**
* @Route("/", name="app_home", methods={"GET", "POST"})
*/
public function getConseiller(CallApiServices $callApiServices, Request $request): Response
{
$user = $this->getUser();
// $serviceId = $this->getParameter('app.serviceId');
// if ($user) {
// $client = $callApiServices->clientProfile($serviceId, $user->getClientId());
// $user->setSolde($client['solde']);
// }
$serviceId = $this->getParameter('app.serviceId');
$clientId = 0;
$session = new Session();
if ($user) {
$clientId = $user->getClientId();
$client = $callApiServices->clientProfileCheck($serviceId, $clientId);
if (isset($client['responseCode'])) {
return $this->redirectToRoute('app_logout');
}
$user->setSolde($client['solde']);
}
$accountId = $this->getParameter('app.accountId');
$conseillers = $callApiServices->getListConseillers($accountId, $serviceId);
$config = $callApiServices->configuratationPlateforme($accountId, $serviceId);
array_multisort(
array_column($conseillers, 'userServiceId'),
SORT_DESC,
$conseillers
);
usort($conseillers, fn ($a, $b) => [
[1 => 1, 2 => 2, 0 => 3][$a['userState']],
] <=> [
[1 => 1, 2 => 2, 0 => 3][$b['userState']],
]);
usort($conseillers, fn ($a, $b) => [
[1 => 1, 2 => 2, 0 => 3][$a['userState']],
] <=> [
[1 => 1, 2 => 2, 0 => 3][$b['userState']],
]);
$configPlateforme = new Config();
$configPlateforme->setKindOfCredit($config['kindOfCredit']);
$configPlateforme->setItemsPerPage($config['itemsPerPage']);
$configPlateforme->setItemsPerRow($config['itemsPerRow']);
$configPlateforme->setWelcomeCredit($config['welcomeCredit']);
$configPlateforme->setRecaptchaTab($config['recaptchaTab']);
$configPlateforme->setPaymentInfos($config['paymentInfos']);
$configPlateforme->setMail($config['mail']);
$configPlateforme->setServiceId($serviceId);
$configPlateforme->setAccountId($accountId);
$configPlateforme->setMarchand($config['marchand']);
//$session = new Session();
$session->set('configPlateforme', $configPlateforme);
return $this->render('home/index.html.twig', [
'conseillers' => $conseillers,
'config' => $config,
'clientId' => $clientId
]);
}
/**
* @Route("/consultant/{id}", name="app_consultant", methods={"GET", "POST"})
*/
public function conseillerEtPlanning(CallApiServices $callApiServices, Request $request, $id): Response
{
$user = $this->getUser();
$clientId = 0;
$serviceId = $this->getParameter('app.serviceId');
if ($user) {
$client = $callApiServices->clientProfileCheck($serviceId, $user->getClientId());
$user->setSolde($client['solde']);
$clientId = $user->getClientId();
}
$accountId = $this->getParameter('app.accountId');
$conseillerAvis = $callApiServices->conseillerAvis($serviceId, $id);
$conseiller = $callApiServices->conseillerEtPlanning($id, $serviceId);
if (!isset($conseiller[0])) {
// le conseiller n'est pas configuré
return $this->redirectToRoute('app_home');
}
$session = $request->getSession();
$session->set('complementId', $id);
$weekdaysShort = ['Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim'];
$daysHoursShort = [
0 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
1 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
2 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
3 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
4 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
5 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
6 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
7 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
8 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
9 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
10 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
11 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
12 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
13 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
14 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
15 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
16 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
17 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
18 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
19 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
20 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
21 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
22 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false],
23 => ['Lun' => false, 'Mar' => false, 'Mer' => false, 'Jeu' => false, 'Ven' => false, 'Sam' => false, 'Dim' => false]
];
$i = 0;
foreach ($conseiller[0]['planningArray'] as $planing) {
$begin[] = explode(':', $planing['begin']);
$end[] = explode(':', $planing['end']);
$day[] = $planing['weekDayNum'];
$hourEnd[] = $end[$i][0];
$hourBegin[] = $begin[$i][0];
$minuteEnd[] = $end[$i][1];
$minuteBegin[] = $begin[$i][1];
$calcul = $hourEnd[$i] - $hourBegin[$i];
$h = 0;
$weekday = $weekdaysShort[$planing['weekDayNum']];
while ($calcul > $h) {
$daysHoursShort[$begin[$i][0] + $h][$weekday] = true;
$h++;
}
$i++;
};
$plan[] = [];
$ressources = [];
$planningEventId = "";
foreach ($conseiller[0]['planningArray'] as $userplanning) {
$extensionCode = $conseiller[0]['userId'];
$userPseudo = $conseiller[0]['userPseudo'];
$datePlan = explode("T", $userplanning['date']);
$start = $datePlan[0] . "T" . $userplanning['begin'];
$end = $datePlan[0] . "T" . $userplanning['end'];
$planningEventId = $userplanning['planningListId'];
switch ($userplanning['weekDayNum']) {
case "0":
$dayOfWeek = "1";
break;
case "1":
$dayOfWeek = "2";
break;
case "2":
$dayOfWeek = "3";
break;
case "3":
$dayOfWeek = "4";
break;
case "4":
$dayOfWeek = "5";
break;
case "5":
$dayOfWeek = "6";
break;
case "6":
$dayOfWeek = "0";
break;
case null:
$dayOfWeek = "0";
break;
}
$plan[] = [
"id" => $userplanning['planningListId'],
"title" => "Presence",
"daysOfWeek" => $dayOfWeek,
"weekDayNum" => $userplanning['weekDayNum'],
"startTime" => $userplanning['begin'],
"endTime" => $userplanning['end'],
"userId" => $userplanning['userId'],
"userPseudoId" => $userplanning['userPseudoId'],
"resourceId" => $userplanning['userPseudoId'],
$ressources[] = [
"id" => $userplanning['userPseudoId'],
"userId" => $userplanning['userId'],
"title" => $userPseudo
]
];
}
$newressources = [];
$ressources = json_encode($ressources);
$date = new DateTime('now');
$date = $date->format('Y-m-d');
$data = json_encode($plan);
$avisForm = $this->createForm(AvisType::class);
$avisForm->handleRequest($request);
if ($avisForm->isSubmitted() && $avisForm->isValid()) {
$avis = $request->request->get('avis');
return $this->redirectToRoute('sendAvis', ['id' => $id, 'message' => $avis['message'], 'note' => $avis['note']]);
}
$avisFormMobile = $this->createForm(AvisType::class);
$avisFormMobile->handleRequest($request);
if ($avisFormMobile->isSubmitted() && $avisFormMobile->isValid()) {
$avis = $request->request->get('avis');
return $this->redirectToRoute('sendAvis', ['id' => $id, 'message' => $avis['message'], 'note' => $avis['note']]);
}
return $this->render('consultant/index.html.twig', [
'conseiller' => $conseiller,
'weekdaysShort' => $weekdaysShort,
'daysHoursShort' => $daysHoursShort,
'conseillerAvis' => $conseillerAvis,
'avisForm' => $avisForm->createView(),
'planningFormat' => 'HebdomadaireUtilisateur',
'data' => $data,
"date" => $date,
'clientId' => $clientId,
'ressources' => $ressources,
'planningEventId' => $planningEventId,
'avisFormMobile' => $avisFormMobile->createView()
]);
}
/**
* @Route("/ping", name="ping", methods={"POST"})
*/
public function ping(Mercure $mercure): Response
{
$topic = 'https://star-voyance/mail';
$data = [0];
$mercure->mercurePost($topic, $data);
return $this->redirectToRoute('app_home');
}
/**
* @Route("/sendAvis/{id}/{message}/{note}", name="sendAvis", methods={"GET", "POST"})
*/
public function sendAvis(CallApiServices $callApiService, CallApiTab $callApiTab, $id, $message, $note): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$apiToken = $user->getApiToken();
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$conseiller = $callApiService->conseillerEtPlanning($id, $serviceId);
$date = new DateTime('now');
$sendAvisData = [
"clientId" => $clientId,
"serviceId" => $serviceId,
"complementId" => $id,
"userPseudoId" => $conseiller[0]['userPseudoId'],
"datePost" => $date->format(('Y:m:d')) . " 00:00:00",
"commentaire" => $message,
"note" => $note
];
$utilisateurSendAvisEndPoint = $this->endpoint['clientAvisNoter'];
$utilisateurSendAvisTab = $callApiTab->tab($apiToken, $sendAvisData);
$utilisateurSendAvis = $callApiService->postApi($utilisateurSendAvisEndPoint, $utilisateurSendAvisTab);
return $this->redirectToRoute('app_consultant', [
'id' => $id,
'clientId' => $clientId
]);
}
/**
* @Route("/consultants", name="app_all", methods={"GET", "POST"})
*/
public function getAllConseiller(CallApiServices $callApiServices, Request $request): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$conseillers = $callApiServices->getListConseillers($accountId, $serviceId);
$config = $callApiServices->configuratationPlateforme($accountId, $serviceId);
$session = $request->getSession();
$config = $session->get('configPlateforme');
return $this->render('home/allConseiller.html.twig', [
'conseillers' => $conseillers,
'config' => $config,
'clientId' => $clientId
]);
}
}