<?php
namespace App\Controller;
use App\Entity\Estilistas;
use App\Entity\Preferencias;
use App\Entity\Clientes;
use App\Entity\Eventos;
use App\Entity\BookingDeleted;
use App\Entity\Servicios;
use App\Entity\SoldProducts;
use App\Entity\Productos;
use App\Entity\WaitingList;
use App\Entity\GiftCard;
use App\Entity\Activity;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
class EventosController extends AbstractController
{
/**
* @Route("/noIndex", name="user")
*/
public function noIndex(): Response
{
return $this->render('security/login.html.twig', [
'controller_name' => 'UserController',
'error'=>'error'
]);
}
public function getLanguage()
{
$language = "es";
if (isset($_COOKIE['lang']))
{
$language = $_COOKIE['lang'];
}
$package = new Package(new EmptyVersionStrategy());
$urlLang = $package->getUrl('language/'.$language.'.json');
$lang = json_decode(file_get_contents($urlLang));
return $lang;
}
/**
* @Route("/calendar", name="calendar") //INICIO O INDEX
*/
public function index(Request $request, EntityManagerInterface $em): Response
{
if($this->checkCompany($em)){
$this->redirectToRoute('app_logout');
return $this->redirectToRoute('app_login', ['msg'=>1]);
}else{
$user = $this->getUser();
$views = 1;
$dataStylist = [];
if (method_exists($user, 'getCompany')) { $company = $user->getCompany()->getId(); }
else { $company = $user->getId(); }
$preference = $em->getRepository(Preferencias::class)->findOneBy(['company'=>$company]);
if($preference){
$language = $preference->getLanguage();
$calendarStart = $preference->getStartTime();
$calendarEnd = $preference->getEndTime();
$timer = $preference->getTimer();
$logo = $preference->getLogo();
$notify = $preference->isNotify();
}else{
$language = self::getLanguage();
$calendarStart = '08:00';
$calendarEnd = '20:00';
$timer = '30';
$logo = null;
$notify = true;
}
if (method_exists($user, 'isNotify')) { $notify = $user->isNotify(); }
$admin = false;
if (in_array("ROLE_ADMIN", $user->getRoles())) { $admin = true; }
$estilistas = $em->getRepository(Estilistas::class)->findBy(['showed'=>true, 'company'=>$company]);
// $waitingList = $em->getRepository(WaitingList::class)->findBy(['company'=>$company]);
if ($estilistas) {
foreach ($estilistas as $stylist) {
$avatar = 'avatarUser.png';
if ($stylist->getFotoPerfil())
{
$avatar = $company.'/'.$stylist->getFotoPerfil();
}
$dataStylist[] = [
'id' => $stylist->getId(),
'enabled' => $stylist->getEnabled(),
'nombre' => $stylist->getNombre(),
'foto' => $avatar
];
}
}
if (isset($_COOKIE['lang']))
{
$language = $_COOKIE['lang'];
}
else {
setcookie('lang', $language);
}
if ($request->request->get('views')) {
$views = $request->request->get('views');
}
return $this->render('eventos/index.html.twig', [
// 'locale'=>$locale,
'views' => $views,
'dataStylist' => $dataStylist,
'estilistas' => $estilistas,
'userLang' => $language,
'companyId' => $company,
'logo' => $logo,
'notify' => $notify,
'admin' => $admin,
'calStart' => $calendarStart,
'calEnd' => $calendarEnd,
'timer' => $timer,
// "waitingList" => count($waitingList),
'lang' => json_decode(file_get_contents('language/'.$language.'.json'))
]);
}
}
/**
* @Route("/eventos", name="eventos", options={"expose"=true}) //MUESTRA EVENTOS EXISTENTES
*/
public function eventos(Request $request, EntityManagerInterface $em)
{
if ($content = $request->request->all())
{
$workerId = $content['idWorker'];
$events=[];
$eventss=[];
$Sevents = [];
$eventos = $em->getRepository(Eventos::class)->findBy(['estilistas'=>$workerId]);
foreach ($eventos as $evento)
{
if ($evento->getTotal() == 0)
{
$totalToShow = "";
}
else
{
$totalToShow = $evento->getTotal()." €";
}
$clientId = $evento->getClientes() ? $evento->getClientes()->getId() : 'deleted';
$events[]=[
'id' => $evento->getId(),
'start' => $evento->getStart()->format('Y-m-d H:i:s'),
'end' => $evento->getEnd()->format('Y-m-d H:i:s'),
'color' => $evento->getColor(),
'textColor' => $evento->getTextColor(),
'total' => $evento->getTotal(),
'comentario' => $evento->getComentario(),
'id_cliente' => $clientId,
'id_servicio' => $evento->getServicios(),
'payment' => $evento->getPayment(),
'id_producto' => $evento->getSoldProducts(),
'id_estilista' => $evento->getEstilistas()->getId(),
'madeBy' => $evento->getMadeBy(),
'title' => $evento->getKunde()."\n".$evento->getDescripcion()."\n".$totalToShow,
'principal' => true,
'client' => $evento->getKunde()
];
$color1 = '#51AEF0';
$color2 = '#51AEF1';//312f2f
if (!is_null($evento->getPayment())) {
// $color1 ='#1c7430';
$color2 = '#4abe66';//'#0d3516';
}
if (!is_null($evento->getSStart())) {
$events[] =[ //linea de union
'start' => $evento->getEnd()->format('Y-m-d H:i:s'),
'end' => $evento->getSStart()->format('Y-m-d H:i:s'),
'color' => $color1,
];
$events[] =[ // segundo tiempo
'id' => $evento->getId().'-2',
'start' => $evento->getSStart()->format('Y-m-d H:i:s'),
'end' => $evento->getSEnd()->format('Y-m-d H:i:s'),
'color' => $color2,
'textColor' => '#000000',
'title' => $evento->getKunde(),
'principal' => false
];
}
}
$response = new JsonResponse($events);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}
/**
* @Route("/event_click", name="eventClick", options={"expose"=true}) //MUETRA EL EVENTO CLICADO
*/
public function eventClick(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$id = $request->request->get('id');
// $objEvento = $resultado->objEvento;
$evento = $em->getRepository(Eventos::class)->findOneBy(['id'=>$id]);
if (!is_null($evento))
{
$service = "";
$servicios1 = explode("-", $evento->getServicios());
$servicios2 = explode(" / ", $servicios1[1]);
$services = [];
for ($i=0; $i <count($servicios2) ; $i++) //PRECIO DE CADA SERVICIOS SEGUN TAMAÑO DE PELO
{
$precio=0;
$totalProducts = 0;
$listaProductos = null;
$service = $em->getRepository(Servicios::class)->findOneBy(['id'=>$servicios2[$i]]);
if (!is_null($service))
{
if ($servicios1[0] == "k") { $precio = $service->getPCorto();}
elseif ($servicios1[0] == "m") { $precio = $service->getPMedio();}
elseif ($servicios1[0] == "l") { $precio = $service->getPLargo();}
$services[] = [
'servId' => $service->getId(),
'servNombre' => $service->getServicio(),
'servPrecio' => $precio,
'servTime' => $service->getTiempo()->format('H:i')
];
}
}
if (!is_null($evento->getSoldProducts()))
{
$productosVendidos = $evento->getSoldProducts();
$totalProducts = $productosVendidos->getTotal();
$prodquant = $productosVendidos->getProductosId();
foreach ($prodquant as $prod)
{
$prodSplit = explode('-', $prod);
$prodId = $prodSplit[0];
$prodQuatity = $prodSplit[1];
$productos = $em->getRepository(Productos::class)->findOneBy(['id'=>$prodId]);
$totalPrice = $productos->getPrecioVp() * $prodQuatity;
$listaProductos[] = [
'name' => $productos->getNombre(),
'quantity' => $prodQuatity,
'uniPrice' => number_format($productos->getPrecioVp(), 2),
'price' => number_format($totalPrice, 2)
];
}
}
$sStart = null;
$sEnd = null;
if (!is_null($evento->getSStart())) {
$sStart = $evento->getSStart()->format('Y-m-d H:i:s');
$sEnd = $evento->getSEnd()->format('Y-m-d H:i:s');
}
$card = $evento->getCard() ? $evento->getCard() : 0;
$cash = $evento->getCash() ? $evento->getCash() : 0;
$giftCard = $evento->getGiftCard() ? $evento->getGiftCard() : 0;
$madeAt = '';
if ($evento->getMadeAt()) {
$madeAt = $evento->getMadeAt()->format('d/m/y');
}
if ($evento->getClientes()) {
$clientId = $evento->getClientes()->getId();
$clientName = $evento->getClientes()->getNombre();
$clientPhone = $evento->getClientes()->getTelefono();
$clientEmail = $evento->getClientes()->getEmail();
}else{
$clientId = 'deleted';
$clientName = $evento->getKunde();
$clientPhone = '';
$clientEmail = '';
}
$clientId = $evento->getClientes() ? $evento->getClientes()->getId() : 'deleted';
$respuesta=[
'id' => $evento->getId(),
'id_cliente' => $clientId,
'id_estilista' => $evento->getEstilistas()->getId(),
'estilista' => $evento->getEstilistas()->getNombre(),
'cliente' => $clientName,
'telefono' => $clientPhone,
'email' => $clientEmail,
'start' => $evento->getStart()->format('Y-m-d H:i:s'),
'end' => $evento->getEnd()->format('Y-m-d H:i:s'),
'sStart' => $sStart,
'sEnd' => $sEnd,
'color' => $evento->getColor(),
'textColor' => $evento->getTextColor(),
'total' => number_format($evento->getTotal(), 2),
'comentario' => $evento->getComentario(),
'id_servicio' => $evento->getServicios(),
'payment' => $evento->getPayment(),
'card' => $card,
'cash' => $cash,
'giftCard' => $giftCard,
"servicios" => $services,
'id_productos' => $totalProducts,
'detalleProductos' => $listaProductos,
'preference' => $evento->getPreference(),
'madeAt' => $madeAt
// 'title'=>$evento->getClientes()->getNombre()."\n".$service."\n".$evento->getTotal()." €"
];
$response = new JsonResponse($respuesta, Response::HTTP_OK);
}
else
{
$jsonResponse = [
'error' => 'No event found'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_NOT_FOUND);
}
}
else
{
$jsonResponse = [
'error' => 'Bad request'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_BAD_REQUEST);
}
return $response;
}
/**
* @Route("/registro_evento", name="registroEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
*/
public function registroEvento(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany(); }
else{ $company = $user; }
$content = $request->request->get('obj');
$now = new \DateTime('Europe/London');
$resultado = json_decode($content);
$objEvento = $resultado->objEvento;
// $accion = $resultado->accion;
// localizamos al cliente si existe, si no, lo creamos
$cliente = $em->getRepository(Clientes::class)->findOneBy(['id'=>$objEvento->id_cliente]);
if (!is_null($cliente))
{
$clienteId = $cliente;
}
else
{
$client = new Clientes();
$client->setNombre($objEvento->txtNombreCliente);
$client->setTelefono($objEvento->txtTelefonoCliente);
$client->setEmail($objEvento->txtEmailCliente);
$client->setCompany($company);
$client->setCreatedAt($now);
$em->persist($client);
$em->flush();
$clienteId = $client;
}
//localizamos al empleado
$estilista = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->id_estilista]);
if (is_null($estilista))
{
$estilistaId = 1;
}
else
{
$estilistaId = $estilista;
}
$descripcion = "";
$realPrice = 0;
$hours = new \DateTime('0000-00-00 00:00:00');
$serv1 = explode("-", $objEvento->id_servicio);
$serv2 = explode(" / ", $serv1[1]);
for ($i=0; $i <count($serv2)-1 ; $i++)
{
$serv = $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv2[$i]]);
if ($serv1[0] == 'k') {$pricing = $serv->getPCorto();}
elseif ($serv1[0] == 'm') {$pricing = $serv->getPMedio();}
elseif ($serv1[0] == 'l') {$pricing = $serv->getPLargo();}
$descripcion .= $serv->getServicio()." / ";
$hour = $serv->getTiempo()->format('H');
$min = $serv->getTiempo()->format('i');
$hours->modify('+'.$hour.' hours');
$hours->modify('+'.$min.' minutes');
$rest = '';
$realPrice = $realPrice + $pricing;
}
// $startFact = 0;
// $lastFact = $em->getRepository(Eventos::class)->lastEvent();
// if (!empty($lastFact->getInvoice()))
// {
// $fact = $lastFact->getInvoice();
// $nextFact = explode('-', $fact);
// $newFact = $now->format('YmdH').'-'.($nextFact[1] + 1).'-'.$estilistaId->getId();
// }
// else
// {
// $newFact = $now->format('ymd').'-'.$startFact.'-'.$estilistaId->getId();
// }
// if ($clienteId == 2412 ||
// $clienteId == 2414 ||
// $clienteId == 2416 ||
// $clienteId == 2418)
// {
// $preference = $em->getRepository(Preferencias::class)->findOneBy(['company'=>]);
// $tStart = ;
// $tEnd = ;
// }
// else
// {
// $tStart = new \DateTime($objEvento->start);
// $tEnd = new \DateTime($objEvento->end);
// }
$sStart = null;
$sEnd = null;
if (!is_null($objEvento->sStart))
{
$sStart = new \DateTime($objEvento->sStart);
$sEnd = new \dateTime($objEvento->sEnd);
}
$startTime = new \DateTime($objEvento->start);
$endTime = new \DateTime($objEvento->end);
if ($objEvento->id_servicio != "k-0 /" ) { //es un servicio real
$endTime = new \DateTime($objEvento->start);
$hora = $hours->format('H');
$minutos = $hours->format('i');
$endTime->modify('+'.$hora.' hours');
$endTime->modify('+'.$minutos.' minutes');
}
else{ // botones alternativos
$preference = $em->getRepository(Preferencias::class)->findOneBy(['company'=>$company->getId()]);
if ($preference) {
if ($objEvento->txtNombreCliente != "REST") {
$prime = $startTime->format('Y-m-d');
$secu = $endTime->format('Y-m-d');
$startTime = new \DateTime($prime.' '.$preference->getStartTime());
$endTime = new \DateTime($secu.' '.$preference->getEndTime());
}
}
}
$priceModify = '';
if ($objEvento->total != $realPrice) {
$priceModify = 'and total modified from '.$realPrice.' to '.$objEvento->total;
}
$mader = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
$evento = new Eventos();
$evento->setClientes($clienteId);
$evento->setEstilistas($estilistaId);
$evento->setStart($startTime);
$evento->setEnd($endTime);
$evento->setSStart($sStart);
$evento->setSEnd($sEnd);
$evento->setColor($objEvento->color);
$evento->setTextColor($objEvento->textColor);
$evento->setTotal($objEvento->total);
$evento->setComentario($objEvento->comentario);
$evento->setServicios($objEvento->id_servicio);
$evento->setKunde($clienteId->getNombre());
$evento->setDescripcion($descripcion);
$evento->setInvoice('');
$evento->setMadeBy($mader);
$evento->setMadeAt($now);
$evento->setPreference($objEvento->preference);
$em->persist($evento);
// $product = new SoldProducts();
// $product->setEstilistas($estilistaId);
// $product->setClientes($clienteId);
// $product->setNumeroFac();
// $product->setIdProductos();
// $product->setTotal($objEvento->totalProducto);
// $product->setPaymentMethod();
// $em->persist($product);
// $em->flush();
// $evento->setInvoice($now->format('ymd').'-'.$evento->getId());
$em->flush();
if ($evento->getId())
{
$waitingList = $em->getRepository(WaitingList::class)->findOneBy(['cliente'=>$clienteId->getId()]);
if ($waitingList)
{
$em->remove($waitingList);
$em->flush();
}
$activity = new Activity();
$activity->setCompany($company);
$activity->setEvent($evento->getId());
$activity->setAction('made');
$activity->setMadeBy($mader->getId());
$activity->setDate($now);
$activity->setDescription('new event '.$priceModify);
$em->persist($activity);
$em->flush();
}
$response = new JsonResponse(['msg'=> 'success', 'comp' => $company->getId()], Response::HTTP_OK);
}
else
{
$jsonResponse = [
'error' => 'Bad request'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_BAD_REQUEST);
}
return $response;
}
/**
* @Route("/modificar_evento", name="modificarEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
*/
public function modificarEvento(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany(); }
else{ $company = $user; }
$now = new \DateTime('Europe/London');
$content = $request->request->get('obj');
$resultado = json_decode($content, true);
$objEvento = $resultado['objEvento'];
$evento = $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento['id']]);
$mader = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento['madeBy']]);
$activity =[];
if (!is_null($evento))
{
if (!isset($objEvento['color'])) //drop - Reise
{
$fecha = explode(" ", $objEvento['start']);
if ($objEvento['principal'] == 'true')
{
if ($evento->getStart()->format('Y-m-d H:i:s') != $objEvento['start']) {
$activity[]= 'Modified start time from '.$evento->getStart()->format('Y-m-d H:i:s').' to '.$objEvento['start'];
}
$evento->setStart(new \DateTime($objEvento['start']));
if ($evento->getEnd()->format('Y-m-d H:i:s') != $objEvento['end']) {
$activity[]= 'Modified end time from '.$evento->getEnd()->format('Y-m-d H:i:s').' to '.$objEvento['end'];
}
$evento->setEnd(new \DateTime($objEvento['end']));
if (!is_null($evento->getSStart()))
{
$evento->setSstart(new \DateTime($fecha[0].' '.$evento->getSStart()->format('H:i:s')));
$evento->setSEnd(new \DateTime($fecha[0].' '.$evento->getSEnd()->format('H:i:s')));
}
}
else
{
if ($evento->getSStart()->format('Y-m-d H:i:s') != $objEvento['start']) {
$activity[]= 'Modified second time from '.$evento->getSStart()->format('Y-m-d H:i:s').' to '.$objEvento['start'];
}
$evento->setSStart(new \DateTime($objEvento['start']));
$evento->setSEnd(new \DateTime($objEvento['end']));
$evento->setStart(new \DateTime($fecha[0].' '.$evento->getStart()->format('H.i:s')));
$evento->setEnd(new \DateTime($fecha[0].' '.$evento->getEnd()->format('H.i:s')));
}
$em->persist($evento);
$em->flush();
}
else
{
$descripcion = "";
$realPrice = 0;
$serv1 = explode("-", $objEvento['id_servicio']);
$serv2 = explode(" / ", $serv1[1]);
for ($i=0; $i <count($serv2)-1 ; $i++)
{
$serv = $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv2[$i]]);
if ($serv1[0] == 'k') {$pricing = $serv->getPCorto();}
elseif ($serv1[0] == 'm') {$pricing = $serv->getPMedio();}
elseif ($serv1[0] == 'l') {$pricing = $serv->getPLargo();}
$descripcion .= $serv->getServicio()." / ";
$realPrice = $realPrice + $pricing;
}
if ($evento->getDescripcion() != $descripcion) {
$activity[]= 'Modified service from '.$evento->getDescripcion().' to '.$descripcion;
}
$cliente = $em->getRepository(Clientes::class)->findOneBy(['id'=>$objEvento['id_cliente']]);
if (is_null($cliente))
{
$cliente = new Clientes();
$cliente->setNombre($objEvento['txtNombreCliente']);
$cliente->setTelefono($objEvento['txtTelefonoCliente']);
$cliente->setEmail($objEvento['txtEmailCliente']);
$cliente->setCompany($company);
$cliente->setCreatedAt($now);
$em->persist($cliente);
$em->flush();
$activity[]= 'New unregistered customer added, and modified from '.$evento->getKunde().' to '.$objEvento['txtNombreCliente'];
}
else{
if ($evento->getClientes()->getId() != $cliente->getId()) {
$activity[] = 'Customer modified from '.$evento->getKunde().' to '.$cliente->getNombre();
}
}
if (!is_null($objEvento['sStart']))
{
$objEvento['sStart'] = new \DateTime($objEvento['sStart']);
$objEvento['sEnd'] = new \DateTime($objEvento['sEnd']);
}
$estilista = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento['id_estilista']]);
$evento->setClientes($cliente);
if ($evento->getEstilistas() != $estilista) {
$activity[] = 'Stylist modified from '.$evento->getEstilistas().' to '.$estilista;
$evento->setEstilistas($estilista);
}
$evento->setStart(new \DateTime($objEvento['start']));
$evento->setEnd(new \DateTime($objEvento['end']));
$evento->setSStart($objEvento['sStart']);
$evento->setSEnd($objEvento['sEnd']);
if ($realPrice != $objEvento['total'] && $evento->getTotal() != $objEvento['total']) {
$activity[] = 'Total amount modified from '.$realPrice.' to '.$objEvento['total'];
}
$evento->setTotal($objEvento['total']);
if ($evento->getComentario() != $objEvento['comentario']) {
$activity[] = 'Comment modified from '.$evento->getComentario().' to '.$objEvento['comentario'];
$evento->setComentario($objEvento['comentario']);
}
$evento->setServicios($objEvento['id_servicio']);
$evento->setKunde($cliente->getNombre());
if ($evento->getPreference() != $objEvento['preference']) {
$activity[] = 'Modified preferred stylist';
$evento->setPreference($objEvento['preference']);
}
$evento->setDescripcion($descripcion);
if ($evento->getColor() !== "#1c7430")
{
$evento->setColor($objEvento['color']);
$evento->setTextColor($objEvento['textColor']);
}
// $evento->setProductos($objEvento->id_productos);
$em->persist($evento);
$em->flush();
}
if (count($activity) > 0) {
foreach ($activity as $action) {
$actividad = new Activity();
$actividad->setCompany($company);
$actividad->setEvent($evento->getId());
$actividad->setAction('modify');
$actividad->setMadeBy($mader->getId());
$actividad->setDate($now);
$actividad->setDescription($action);
$em->persist($actividad);
$em->flush();
}
}
$response = new JsonResponse(['mgs'=>'success', 'comp'=> $company->getId()], Response::HTTP_OK);
}
else
{
$jsonResponse = [
'error' => 'No event found'
];
$response = new JsonResponse($objEvento, Response::HTTP_NOT_FOUND);
}
}
else
{
$jsonResponse = [
'error' => 'Bad request'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_BAD_REQUEST);
}
return $response;
}
/**
* @Route("/pagar_evento", name="pagarEvento",options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
*/
public function pagarEvento(Request $request, EntityManagerInterface $em)
{
$idSoldProducts = null;
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany(); }
else{ $company = $user; }
$content = $request->request->get('obj');
$resultado = json_decode($content);
$idProducts = $resultado->idProduct;
$objEvento = $resultado->objEvento;
$mader = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
$now = new \DateTime('Europe/London');
// if (!is_null($objEvento->idSoldProducts) || !empty($objEvento->idSoldProducts))
// {
$idSoldProducts = $em->getRepository(SoldProducts::class)->findOneBy(['id'=>$idProducts]);
// }
$evento = $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento->id]);
if (!is_null($evento))
{
if ($objEvento->formaPago == "")
{
if ($objEvento->giftCardUsed != "")
{
$evento->setPayment(4);
$giftcard = $em->getRepository(GiftCard::class)->findOneBy(['id'=>$objEvento->giftCardUsed]);
if ($giftcard)
{
$total = $objEvento->precioProd + $objEvento->precioServ;
// $total = $evento->getTotal();
$totalGC = $giftcard->getTotal();
$resto = $total - $totalGC;
if ($resto > 0 )
{
$forCash = $resto;
$em->remove($giftcard);
$em->flush();
$evento->setGiftCard($totalGC);
if ($objEvento->txtCard != "") { $evento->setCard($objEvento->txtCard); $forCash = $resto - $objEvento->txtCard; }
if ($objEvento->txtCash != "") { $evento->setCash($objEvento->txtCash); }
}
else
{
$giftcard->setTotal($resto *-1);
$evento->setGiftCard($totalGC - ($resto *-1));
}
}
}
else
{
$evento->setPayment(3);
if ($objEvento->txtCard != "") { $evento->setCard($objEvento->txtCard); $forCash = $evento->getTotal() - $objEvento->txtCard; }
if ($objEvento->txtCash != "") { $evento->setCash($objEvento->txtCash); }
}
}
else
{
$evento->setPayment($objEvento->formaPago);
}
$evento->setColor('#1c7430');
$evento->setTextColor('#000000');
$evento->setSoldProducts($idSoldProducts);
$evento->setServicios($objEvento->id_servicio);
$em->persist($evento);
$actividad = new Activity();
$actividad->setCompany($company);
$actividad->setEvent($evento->getId());
$actividad->setAction('pay');
$actividad->setMadeBy($mader->getId());
$actividad->setDate($now);
$actividad->setDescription('Billed booking');
$em->persist($actividad);
$em->flush();
}
$response = new JsonResponse(['msg'=> 'success', 'comp' => $company->getId()], Response::HTTP_OK);
}
else
{
$jsonResponse = [
'error' => 'Bad request'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_BAD_REQUEST);
}
return $response;
}
/**
* @Route("/eliminar_evento", name="eliminarEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
*/
public function eliminarEvento(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany(); }
else{ $company = $user; }
$now = new \Datetime('Europe/London');
$content = $request->request->get('obj');
$resultado = json_decode($content);
$objEvento = $resultado->objEvento;
$evento = $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento->id]);
$stylist = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
if (!is_null($evento))
{
if ($evento->getClientes()) {
$eventDeleted = new BookingDeleted();
$eventDeleted->setClientes($evento->getClientes());
$eventDeleted->setEstilistas($evento->getEStilistas());
$eventDeleted->setSoldProducts($evento->getSoldProducts());
$eventDeleted->setKunde($evento->getKunde());
$eventDeleted->setStart($evento->getStart());
$eventDeleted->setEnd($evento->getEnd());
$eventDeleted->setSStart($evento->getSStart());
$eventDeleted->setSEnd($evento->getSEnd());
$eventDeleted->setColor($evento->getColor());
$eventDeleted->setTextColor($evento->getTextColor());
$eventDeleted->setTotal($evento->getTotal());
$eventDeleted->setComentario($evento->getComentario());
$eventDeleted->setDescripcion($evento->getDescripcion());
$eventDeleted->setServicios($evento->getServicios());
$eventDeleted->setInvoice($evento->getInvoice());
$eventDeleted->setPreference($evento->getPreference());
if ($evento->getPayment()) {
$eventDeleted->setPayment($evento->getPayment());
}
$eventDeleted->setCash($evento->getCash());
$eventDeleted->setCard($evento->getCard());
$eventDeleted->setGiftCard($evento->getGiftCard());
$eventDeleted->setMadeBy($evento->getMadeBy());
$eventDeleted->setDeletedBy($stylist);
$eventDeleted->setDeletedAt($now);
$eventDeleted->setCompany($company);
$em->persist($eventDeleted);
}
$em->remove($evento);
$em->flush();
$response = new JsonResponse(['mgs'=>'Event deleted', 'comp' => $company->getId()], Response::HTTP_OK);
}
else
{
$jsonResponse = [
'error' => 'No event found'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_NOT_FOUND);
}
}
else
{
$jsonResponse = [
'error' => 'Bad request'
];
$response = new JsonResponse($jsonResponse, Response::HTTP_BAD_REQUEST);
}
return $response;
}
/**
* @Route("/autocomplet", name="autocomplet", options={"expose"=true})
*/
public function autocomplet(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany()->getId(); }
else{ $company = $user->getId(); }
$content = $request->request->get('name');
$clientes = $em->getRepository(Clientes::class)->findBy(['company'=>$company]);
$responseBody=[];
foreach ($clientes as $cliente)
{
// $pos = strstr($cliente->getNombre(), $inicioNombre); DEVUELVE A PARTIR DE LA LETRA INTRODUCIDA
if(is_numeric($content))
{
$pos = strpos($cliente->getTelefono(), $content);
if ($pos !== false)
{
$createdAt = '--/--/--';
if ($cliente->getCreatedAt()) {
$createdAt = $cliente->getCreatedAt()->format('d/m/Y');
}
$responseBody[] = [
'1' => $pos,
'id' => $cliente->getId(),
'nombre' => $cliente->getNombre(),
'telefono' => $cliente->getTelefono(),
'email' => $cliente->getEmail(),
'createdAt' => $createdAt
];
}
}
else
{
// if ($pos1 = strpos($content, 'å'))
// {
// str_replace("å", "Å", $content);
// }
// if ($pos2 = strpos($content, 'æ'))
// {
// str_replace("æ", "Æ", $content);
// }
// if ($pos3 = strpos($content, 'ø'))
// {
// str_replace("ø", "Ø", $content);
// }
$pos = stripos($cliente->getNombre(), $content); // DEVUELVE LA POSICIÓN DE LA LETRA INTRODUCIDA
if ($pos !== false)
{
$createdAt = '--/--/--';
if ($cliente->getCreatedAt()) {
$createdAt = $cliente->getCreatedAt()->format('d/m/Y');
}
$responseBody[] = [
'1'=>$pos,
'id'=>$cliente->getId(),
'nombre'=>$cliente->getNombre(),
'telefono'=>$cliente->getTelefono(),
'email'=>$cliente->getEmail(),
'createdAt' => $createdAt
];
}
}
}
$response = new JsonResponse($responseBody);
}
else
{
$jsonResponse = [
'error'=> "Bad request"
];
$response = new JsonResponse($jsonResponse);
}
return $response;
}
/**
* @Route("/worker_list", name="workerList", options={"expose"=true})
*/
public function workerList(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany()->getId(); }
else{ $company = $user->getId(); }
$workers = $em->getRepository(Estilistas::class)->findBy(['company'=>$company]);
foreach ($workers as $worker)
{
if ( $worker->getEnabled() == true)
{
if ($worker->getId() != $request->query->get('worker')) {
$lista[] =[
'id'=>$worker->getId(),
'nombre'=>$worker->getNombre()
];
}
}
}
return new JsonResponse($lista);
}
else
{
throw new Exception("Error Processing Request", 1);
}
}
/**
* @Route("/dropIn", name="dropIn", options={"expose"=true}) //BLOQUEA LOS IMPUTS DEL CLIENTE DEJANDO DROPIN COMO DEFENIDO
*/
public function dropIn(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$content = $request->request->get('id');
$dropIn = $em->getRepository(Clientes::class)->findOneBy(['nombre'=>$content]);
$jsonResponse = [
'id'=>$dropIn->getId(),
'nombre'=>$dropIn->getNombre(),
'telefono'=>$dropIn->getTelefono(),
'email'=>$dropIn->getEmail()
];
$response = new JsonResponse($jsonResponse);
}
return $response;
}
/**
* @Route("/eliminar_serv_de_lista", name="eliminarServDeLista", options={"expose"=true})
*/
public function eliminarServDeLista(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest())
{
$content = $request->request->all();
$serv = $content['serv'];
$size = $content['size'];
$precio = 0;
$newTotal = 0;
$list = [];
// $splited = explode("&", $content);
if (!empty($serv))
{
// $ids = explode(",", $serv);
for ($i=0; $i <count($serv)-1 ; $i++)
{
$service = $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv[$i]]);
if ($size === "k") { $precio = $service->getPCorto(); }
if ($size === "m") { $precio = $service->getPMedio(); }
if ($size === "l") { $precio = $service->getPLargo(); }
$newTotal +=$precio;
$list[] = [
'id'=>$service->getId(),
'para'=>$service->getPara(),
'servicio'=>$service->getServicio(),
'tamanio'=>$size,
'precio'=>$precio,
'tiempo'=>$service->getTiempo()->format('H:i')
];
}
$response = new JsonResponse(['list'=>$list, 'total'=>$newTotal]);
}
else
{
$response = new JsonResponse(["list"=>'No data']);
}
}
else
{
$response = new JsonResponse(["error"=>'Bad request']);
}
return $response;
}
/**
* @Route("/delete_s_t", name="deleteST", options={"expose"=true})
*/
public function deleteST(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest()) {
$lang = self::getLanguage();
$idEvent = $request->request->get('id');
$evento = $em->getRepository(Eventos::class)->findOneBy(['id'=>$idEvent]);
if (!is_null($evento)) {
$evento->setSStart(null);
$evento->setSEnd(null);
$em->flush();
$response = true;
}
else{
$response = false;
}
return new JsonResponse(['response'=>$response, 'lang'=>$lang]);
}
else{
throw new Exception("Error Processing Request", 1);
}
}
/**
* @Route("/check_admin_pass", name="checkAdminPass", options={"expose"=true})
*/
public function checkAdminPass(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest()) {
$response = null;
$password = $request->request->get('pass');
$pass = hash('sha256', $password);
$admin = $em->getRepository(Estilistas::class)->findOneBy(['code'=>$pass]);
if ($admin) {
if (in_array("ROLE_ADMIN", $admin->getRoles()))
{
$response = true;
}
else{
$response = false;
}
}
return new JsonResponse(['response'=>$response]);
}
else{
throw new Exception("Error Processing Request", 1);
}
}
/**
* @Route("/change_size_service", name="changeSizeService", options={"expose"=true})
*/
public function changeSizeService(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest()) {
$content = $request->request->all();
$size = $content['newSize'];
$newTotal = 0;
for ($i=0; $i <count($content['servId']) -1 ; $i++)
{
$service = $em->getRepository(Servicios::class)->findOneBy(['id'=>$content['servId'][$i]]);
if ($size === "k") { $precio = $service->getPCorto(); }
if ($size === "m") { $precio = $service->getPMedio(); }
if ($size === "l") { $precio = $service->getPLargo(); }
$newTotal +=$precio;
$servicios[]=[
'id'=>$service->getId(),
'para'=>$service->getPara(),
'servicio'=>$service->getServicio(),
'tamanio'=>$size,
'precio'=>$precio,
'tiempo'=>$service->getTiempo()->format('H:i')
];
}
return new JsonResponse(['list'=>$servicios, 'total'=>$newTotal]);
}
else{
throw new Exception("Error Processing Request", 1);
}
}
/**
* @Route("/if_kunde_exist", name="ifKundeExist", options={"expose"=true})
*/
public function ifKundeExist(Request $request, EntityManagerInterface $em)
{
if ($request->isXmlHttpRequest()) {
$language = "es";
if (isset($_COOKIE['lang']))
{
$language = $_COOKIE['lang'];
}
$package = new Package(new EmptyVersionStrategy());
$urlLang = $package->getUrl('language/'.$language.'.json');
$lang = json_decode(file_get_contents($urlLang));
if ($content = $request->getContent())
{
$clientes = $em->getRepository(Clientes::class)->findAll();
foreach ($clientes as $cliente)
{
if ($cliente->getNombre() === $content)
{
return new JsonResponse(['verify'=>true, 'lang'=>$lang]);
break;
}
}
return new JsonResponse(['verify'=>false, 'lang'=>$lang]);
}
return new JsonResponse(['verify'=>false, 'lang'=>$lang]);
}
// asset json del idioma
}
/**
* @Route("/change_stylit_booking", name="changeStylistBooking", options={"expose"=true})
*/
public function changeStylistBooking(Request $request, EntityManagerInterface $em)
{
$response = $this->redirectToRoute('app_logout');
if ($request->isXmlHttpRequest()) {
if ($content = $request->request->all())
{
$newStylist = $em->getREpository(Estilistas::class)->findOneBy(['id'=>$content['newStylist']]);
$booking = $em->getRepository(Eventos::class)->findOneBy(['id'=>$content['eventoId']]);
if ($booking) {
if ($newStylist) {
$booking->setEstilistas($newStylist);
$em->flush();
$response = new JsonResponse(['verify'=>true]);
}else{
$response = new JsonResponse(['verify'=>false, 'msg'=>'Stylist not found']);
}
}else{
$response = new JsonResponse(['verify'=>false, 'msg'=>'Booking not found']);
}
}else{
$response = new JsonResponse(['verify'=>false, 'msg'=>'Bad request']);
}
}
return $response;
}
/**
* @Route("/info_booking", name="infoBooking", options={"expose"=true})
*/
public function infoBooking(Request $request, EntityManagerInterface $em)
{
if($request->isXmlHttpRequest())
{
$lang = self::getLanguage();
$event = $request->request->get('event');
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany()->getId(); }
else{ $company = $user->getId(); }
$result=[];
$activity = $em->getRepository(Activity::class)->findBy(['company'=>$company, 'event'=>$event], ['id'=>'DESC']);
if ($activity) {
foreach ($activity as $log) {
$madeBy = $em->getRepository(Estilistas::class)->findOneBy(['id'=>$log->getMadeBy()]);
$result[]=[
'madeBy' => $madeBy->getNombre().' '.$madeBy->getApellidos(),
'action' => $log->getAction(),
'date' => $log->getDate()->format('d-M-Y'),
'description' => $log->getDescription()
];
}
}
return new JsonResponse(['result'=>$result, 'lang'=>$lang]);
}else{
return $this.redirectToRoute('logout');
}
}
/**
* @Route("/rebooking", name="rebooking", options={"expose"=true})
*/
public function rebooking(Request $request, EntityManagerInterface $em)
{
if($request->isXmlHttpRequest())
{
$user = $this->getUser();
if (method_exists($user, 'getCompany')) { $company= $user->getCompany()->getId(); }
else{ $company = $user->getId(); }
$result = [];
// $data = explode(",", $request->getContent());
$currentWeek = $request->request->get('semana');//$data[0];
$totalHoras = $request->request->get('horas');//$data[1];
$now = new \DateTime();
$week = $now->format('W');
if ($currentWeek != "")
{
$year = $now->format('Y');
if ($currentWeek > 52)
{
$currentWeek = 1;
$year = intval($year) +1;
}
if ($currentWeek < 1)
{
$currentWeek = 52;
$year = intval($year) -1;
}
// $moth= clone $now->format('m');
$date = date_isodate_set($now, $year, $currentWeek);
$fecha = $date->format('Y-m-d');
$now = new \DateTime($fecha);
$week = $now->format('W');
}
$workers = $em->getRepository(Estilistas::class)->findBy(['enabled'=> true, 'showed'=>true, 'company'=>$company]);
foreach ($workers as $worker) //FOR WORKER
{
$timeTable = $worker->getTimeTable();
// $timeTable = explode(",", $worker->getTimeTable());
// $timeTableStart = $timeTable[0];
// $timeTableEnd = $timeTable[1];
$from = clone $now->modify('Monday this week');
$to = clone $now->modify('Sunday this week');
$dateFrom = $from;
$dateTo = $to;
$from->modify('-1 days');
$vistos=[];
for ($d=0; $d < 7 ; $d++) //BUCLE DE DIAS
{
$dia = $d + 1;
if ($dia == 7) { $dia=0; }
$existTime1 = false;
$laHora = [];
$elDia = [];
$fechaDeTurno = [];
$diaDeTurno = clone $from->modify('+1 days');
$desde = $diaDeTurno->format('Y-m-d 00:00:00');
$hasta = $diaDeTurno->format('Y-m-d 23:59:59');
$usedTime = $em->getRepository(Eventos::class)->findEvents($desde, $hasta, $worker->getId());
$horaInicio = explode(":", $timeTable[$dia]['start']);
$horafin = explode(":", $timeTable[$dia]['end']);
for ($h=$horaInicio[0]; $h <= $horafin[0]; $h++) //BUCLE DE HORAS
{
$diaEnCurso = $diaDeTurno->format('d-M-Y');
for ($m=1; $m <= 2 ; $m++) //BUCLE DE MINUTOS
{
if ($m == 1) {$min = "00";}
if ($m == 2) {$min = "30";}
$hour = intval($h.$min);
$checkTime = str_replace(":", "", $timeTable[$dia]['end']);
if ((intval($checkTime) -100) < $hour) { break; }
if (count($usedTime) <= 0) // NO HAY BOOKINGS DE ESTE WORKER, SE INSERTAN TODAS LAS HORAS
{
$existTime1 = true;
$elDia[] = $diaDeTurno->format('d-M-Y');
$fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
$laHora[] = $diaDeTurno->format($h.':'.$min);
}
else
{
$existTime2 = false;
$diasPedientes= "";
$horasPendientes = "";
for ($b=0; $b < count($usedTime) ; $b++) //BUCLE DE BOOKINGS
{
$horaStart = intval($usedTime[$b]['start']->format('Hi'));
$horaEnd = intval($usedTime[$b]['end']->format('Hi'));
if (in_range($hour, $horaStart, $horaEnd))
{
$existTime2 = false;
break ;
}
else
{
if (!in_array($worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00'), $vistos))
{
$vistos[]=$worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00');
if ($h == 9) // SI ES LA PRIMERA HORA
{
$next = $b;
$fechaAcomparar = $usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00');
$horaInicial= new \DateTime($fechaAcomparar);
$totalTimeServ = $horaInicial->diff($usedTime[$next]['start']);
$totalTimeServ = $totalTimeServ->format("%h.%i");
$totalHoras = str_replace(":", ".", $totalHoras);
if (floatval($totalHoras) <= floatval($totalTimeServ))
{
$existTime1 = true;
$elDia[] = $usedTime[$b]['start']->format('d-M-Y');
$fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
$laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
break;
}
}
else //($b == 0) // SI ES EL PRIMER BOOKING
{
if (($b+1) != count($usedTime) && ($b+1) < count($usedTime)) // SI HAY SIGUIENTE BOOKING
{ //NO HACER INSERCIÓN AQUÍ SOLO RECOGER EL INTERVALO DE TIEMPO
$next = $b+1;
$totalTimeServ = $usedTime[$b]['end']->diff($usedTime[$next]['start']);
$totalTimeServ = $totalTimeServ->format("%h.%i");
$totalHoras = str_replace(":", ".", $totalHoras);
if (floatval($totalHoras) <= floatval($totalTimeServ)) //COMPARAMOS HORA REQUERIA CON HORA DISPONIBLE
{
$existTime2 = true;
$diasPedientes = $usedTime[$b]['start']->format('d-M-Y');
$fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
$horasPendientes = $usedTime[$b]['start']->format($h.':'.$min);
}
else
{ // SE ELIMINA DE VISTOS SI NO HAY INTERVALO, PARA QUE VUELVA A ENTRAR
$clave = array_search($worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00'), $vistos);
unset($vistos[$clave]);
}
}
else // ES EL ULTIMO BOOKING
{
$horaFinal = $usedTime[$b]['end']->format('Y-m-d '.$timeTable[$dia]['end'].':00');
$endOfTime = new \DateTime($horaFinal);
$lastTimeAble = $usedTime[$b]['end']->diff($endOfTime);
$totalTimeServ = $lastTimeAble->format("%h.%i");
$totalHoras = str_replace(":", ".", $totalHoras);
if (floatval($totalHoras) <= floatval($totalTimeServ))
{
$existTime1 = true;
$elDia[] = $usedTime[$b]['start']->format('d-M-Y');
$fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
$laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
break;
}
}
}
// else
// {
// $existTime1 = true;
// $elDia[] = $usedTime[$b]['start']->format('d-M-Y');
// $laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
// }
}
}
}//for bookings
if ($existTime2)
{
$existTime1 = true;
$elDia[] = $diasPedientes;
$laHora[] = $horasPendientes;
}
}
} //for minutos
}//for horas
if ($worker->getFotoPerfil()) {
$fotoPerfil = $company.'/'.$worker->getFotoPerfil();
}
else{
$fotoPerfil = 'avatarUser.png';
}
if ($existTime1)
{
for ($w=0; $w <count($elDia) ; $w++)
{
$result[$worker->getNombre().','.$fotoPerfil][$elDia[$w]][]= [$laHora[$w], $fechaDeTurno[$w], $worker->getId(), $totalHoras];
}
}
else
{
$result[$worker->getNombre().','.$fotoPerfil][$diaEnCurso][]= 'no data';
}
}//for dias
}//form worker
$response = new JsonResponse([$result, $week]);
return $response;
}
}
private function checkCompany($em){
$user = $this->getUser();
if (!$user) {
return $this->redirecToRuote('app_logout');
}else{
$now = new \DateTime();
if (method_exists($user, 'getEnabled')){
if ($now > $user->getCompany()->getAbono() && $user->getCompany()->getAbono() != null) {
$user->getCompany()->setStatus(0);
$em->flush();
return true;
}else {
return false;
}
}else{
if ($now > $user->getAbono()) {
$user->setStatus(0);
$em->flush();
return true;
}else{
return false;
}
}
}
}
}
function in_range($num, $start, $end)
{
if( $num < $end AND $num >= $start ) return true;
return false;
}
// namespace App\Controller;
// use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
// use Symfony\Component\HttpFoundation\Response;
// use Symfony\Component\Routing\Annotation\Route;
// class EventosController extends AbstractController
// {
// #[Route('/eventos', name: 'app_eventos')]
// public function index(): Response
// {
// return $this->render('eventos/index.html.twig', [
// 'controller_name' => 'EventosController',
// ]);
// }
// }