<?php
namespace App\Controller;
use App\Entity\Contract;
use App\Entity\ContractItem;
use App\Entity\Guest;
use App\Entity\RoomPlace;
use App\Entity\RoomPlaceDevice;
use App\Entity\RoomPlaceDeviceSettings;
use App\Entity\RoomPlaceSettings;
use App\Entity\RoomPlaceSettingsDevice;
use App\Entity\SMTPSettings;
use App\Repository\KeypadGuestCodeRepository;
use App\Util\EmailUtil;
use App\Util\GuestUtil;
use App\Util\KeypadUtil;
use App\Util\Loxone\Client;
use App\Util\MewsUtil;
use App\Util\PMSConnectorUtil;
use App\Util\PropertyUtil;
use App\Util\ReservationUtil;
use App\Util\RoomUtil;
use App\Util\UserUtil;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
/**
* @Route("/language/{language}", name="set_language")
*/
public function setLang($language, SessionInterface $session)
{
$session->set('_locale', $language);
return $this->redirectToRoute('online_checkin_index');
}
/**
* @Route("/aba-reset", name="aba_reset")
*/
public function abaReser(KeypadGuestCodeRepository $repository, KeypadUtil $keypadUtil)
{
$codes = $repository->findExpirationCodes();
$i = 0;
foreach ($codes as $code) {
if ($code->getKeypadGuest()->getPropertyKeypad()->getProperty()->getId() != 55) {
continue;
}
$isExists = $keypadUtil->checkGuestExists($code->getKeypadGuest()->getPropertyKeypad(), $code->getKeypadGuest());
if(!$isExists) {
dump($code->getCode());
$repository->remove($code);
continue;
}
$keypadUtil->removeCode($code);
$repository->remove($code);
$i++;
if($i>=200) {
break;
}
}
dump($codes);
die("***");
}
public function indexAction()
{
return $this->redirectToRoute('guest_dashboard');
}
/**
* @Route("/language-system/{language}", name="set_system_language")
*/
public function setLangSystem($language, SessionInterface $session)
{
$session->set('_locale', $language);
return $this->redirectToRoute('guest_dashboard');
}
/**
* @Route("/send-checkin-access", name="online_checkin_send_access")
*/
public function sendCheckinAccess(Request $request, PMSConnectorUtil $PMSConnectorUtil, PropertyUtil $propertyUtil, GuestUtil $guestUtil, EmailUtil $emailUtil)
{
$contractNumber = $request->query->get('contractNumber');
$monitoringId = $request->query->get('monitoringId');
if (empty($monitoringId)) {
throw $this->createNotFoundException();
}
$property = $propertyUtil->getPropertyByMonitoringId($monitoringId);
$contract = $PMSConnectorUtil->getContractByNumber($property, $contractNumber);
if (!$contract instanceof Contract) {
throw $this->createNotFoundException();
}
if (!$contract->getMainGuest() instanceof Guest) {
throw $this->createNotFoundException();
}
$guest = $guestUtil->regeneratePassword($contract->getMainGuest());
if (!$guest instanceof Guest) {
throw $this->createNotFoundException();
}
if ($property->getSmtpSettings() instanceof SMTPSettings) {
$emailUtil->addEmailToQueueFromTemplateWithDataTransform($property->getSmtpSettings(), $guest->getEmail(), EmailUtil::MASTER_ACCOUNT_EDIT, $guest);
}
return JsonResponse::create([]);
}
/**
* @Route("/send-checkin-info", name="online_checkin_send_info")
*/
public function sendCheckinInfo(Request $request, PMSConnectorUtil $PMSConnectorUtil, PropertyUtil $propertyUtil, GuestUtil $guestUtil, EmailUtil $emailUtil)
{
$contractNumber = $request->query->get('contractNumber');
$contractItemId = $request->query->get('contractItemId');
$monitoringId = $request->query->get('monitoringId');
if (empty($monitoringId)) {
throw $this->createNotFoundException();
}
$property = $propertyUtil->getPropertyByMonitoringId($monitoringId);
$contract = $PMSConnectorUtil->getContractByNumber($property, $contractNumber);
if (!$contract instanceof Contract) {
throw $this->createNotFoundException();
}
if (!$contract->getMainGuest() instanceof Guest) {
throw $this->createNotFoundException();
}
$guest = $contract->getMainGuest();
if (!$guest instanceof Guest) {
throw $this->createNotFoundException();
}
$contractItem = null;
foreach ($contract->getItems() as $item) {
if ($contractItemId == $item->getExternalId()) {
$contractItem = $item;
}
}
if (!$contractItem instanceof ContractItem) {
throw $this->createNotFoundException();
}
if ($property->getSmtpSettings() instanceof SMTPSettings) {
$emailUtil->addEmailToQueueFromTemplateWithDataTransform($property->getSmtpSettings(), $guest->getEmail(), EmailUtil::NEW_RESERVATION_CUSTOMER, $contractItem);
}
return JsonResponse::create([]);
}
}