<?php
namespace App\Controller;
use App\API\FattureInCloud\Request\DocumentoDettagliRequest;
use App\Entity\FattureInCloud\DocumentoDettagliato;
use App\Entity\Gallery;
use App\Entity\GalleryView;
use App\Message\Gallery\GalleryViewNotification;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpClient\RetryableHttpClient;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use App\API\FattureInCloud\Request\DocumentiListaRequest;
use App\API\FattureInCloud\Documenti;
use FattureInCloud\Configuration;
use Kigkonsult\Icalcreator\Vcalendar;
use App\Service\UrlRsrc;
use ICal\ICal;
class DefaultController extends AbstractController
{
/**
* @Route(name="homeOldApi", path="/homeOldApi")
*
* @return Response
*/
public function old(EntityManagerInterface $entityManager): Response
{
$client = new RetryableHttpClient(HttpClient::create());
$documentsListRequest = new DocumentiListaRequest();
$documentsListRequest->setAnno(2022);
// fatture
// proforma
// ordini
$documentType = 'ordini';
$documentsApi = new Documenti($client);
$documentiListaResponse = $documentsApi->lista($documentType, $documentsListRequest);
if ($documentiListaResponse->isSucces()) {
foreach($documentiListaResponse->getListaDocumenti() as $documentiListaElementoResponse) {
// dump($documentiListaElementoResponse);
$documentoDettagliRequest = new DocumentoDettagliRequest();
$documentoDettagliRequest->setId($documentiListaElementoResponse->getId());
// TODO: add righe, pagamenti, eccetera, al momento li ho commentati nel costruttore
$documentoDettagliatoResponse = $documentsApi->dettagli($documentType, $documentoDettagliRequest);
// dump($documentoDettagliatoResponse);
// if document not exists in db, add it, else skip it
$document = $entityManager->find(DocumentoDettagliato::class, $documentoDettagliatoResponse->getDettagliDocumento()->getId());
if(!$document) {
// mancano gli articoli e i pagamenti
$document = new DocumentoDettagliato($documentoDettagliatoResponse);
}
$entityManager->persist($document);
}
$entityManager->flush();
}
return new Response('importazione eseguita');
}
/**
* @Route(name="home", path="/")
*
* @return Response
*/
public function index(EntityManagerInterface $entityManager): Response
{
return $this->render('home.html.twig');
}
/**
* @Route(name="calendar", path="/calendar")
*
* @return Response
*/
public function calendar(): Response
{
// get iCal contents from URL resource
$url = 'https://gpzoboli:[email protected]/remote.php/dav/calendars/gpzoboli/seltzlab?export';
// $iCalContent = UrlRsrc::getContent($url);
// $iCalContent = file_get_contents($this->getParameter('dir.downloads').'pitagora.ics');
$ical = new ICal($url, array('httpUserAgent' => 'A Different User Agent'));
dump($ical->eventsFromRange('2023-01-01 00:00:00', '2023-05-31 23:59:59'));
return new Response('ciao');
}
/**
* @Route(name="show", path="/show/{slug}")
*
* @return Response
*/
public function showSlug(string $slug, EntityManagerInterface $entityManager, Request $request, MessageBusInterface $bus): Response
{
$timestamp = new \DateTimeImmutable('now');
$message = '';
$subject = 'New view for slug '.$slug.'!';
$file = 'assets/gallery/placeholder.png';
$gallery = $entityManager->getRepository(Gallery::class)->findOneBy(['slug' => $slug]);
if (!$gallery) {
$message = 'Condivisione non trovata';
$subject = 'New view for unfound slug '.$slug.'!';
} else {
if (!$gallery->isActive()) {
$message = 'Condivisione non attiva';
$subject = 'New view for inactive slug '.$slug.'!';
} else {
$file = $gallery->getFilename();
if ($gallery->getExpiration() !== null) {
if ($timestamp > $gallery->getExpiration()) {
$file = 'assets/gallery/placeholder.png';
$message = 'Condivisione scaduta';
$subject = 'New view for expired slug ' . $slug . '!';
} elseif ($gallery->getAllowedViews() > 0 && $gallery->getAllowedViews() -1 < $gallery->getViews()->count()) {
$file = 'assets/gallery/placeholder.png';
$message = 'Viste condivisione esaurite';
}
} elseif ($gallery->getAllowedViews() > 0 && $gallery->getAllowedViews() -1 < $gallery->getViews()->count()) {
$file = 'assets/gallery/placeholder.png';
$message = 'Viste condivisione esaurite';
}
}
}
$bus->dispatch(new GalleryViewNotification($timestamp, $slug, $request->getClientIp(), $request->headers->get('user-agent'), $subject));
// ad ogni vista aggiungere un log e mandare mail (o notifica)
return $this->render('controller/default/showSlug.html.twig', [
'file' => $file,
'message' => $message,
]);
}
}