<?php
namespace App\Nolimit\Project\Manager;
use App\Entity\Project;
use App\Nolimit\Pdf\PdfFileManager;
use App\Nolimit\Project\Persister\ProjectPersister;
use App\Nolimit\Project\Provider\ProjectDatatableProvider;
use App\Nolimit\Project\Provider\ProjectPdfProvider;
use App\Nolimit\Settings\Provider\SettingsProvider;
use App\Repository\ProjectRepository;
use Doctrine\DBAL\Exception;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class ProjectManager
{
private EntityManagerInterface $em;
private TranslatorInterface $translator;
private ProjectRepository $projectRepository;
private ProjectPersister $projectPersister;
private ProjectPdfProvider $projectPdfProvider;
private ProjectDatatableProvider $projectDatatableProvider;
private PdfFileManager $fileManager;
private LoggerInterface $logger;
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
ProjectRepository $projectRepository,
ProjectPersister $projectPersister,
LoggerInterface $stockLogger,
ProjectPdfProvider $projectPdfProvider,
ProjectDatatableProvider $projectDatatableProvider,
PdfFileManager $fileManager,
LoggerInterface $logger
)
{
$this->em = $em;
$this->translator = $translator;
$this->projectRepository = $projectRepository;
$this->projectPersister = $projectPersister;
$this->stockLogger = $stockLogger;
$this->projectPdfProvider = $projectPdfProvider;
$this->projectDatatableProvider = $projectDatatableProvider;
$this->fileManager = $fileManager;
$this->logger = $logger;
}
public function getDataTable(): array
{
$data = [];
$project = $this->projectRepository->findAll();
foreach ($project as $item) {
$data[] = $this->projectDatatableProvider->datatableRow($item);
}
return $data;
}
public function saveUpdateProject(Request $request): Project
{
$project = $this->projectPersister->insertUpdateProject($request);
return $project;
}
public function deleteProject(int $id): bool
{
$dispozitieHeader = $this->projectRepository->find($id);
if (!$dispozitieHeader) {
return false;
}
$dispozitieBodies = $this->dispozitieBodyRepository->findWhereShippedNotNull($id);
if ($dispozitieHeader->getDeletable() && count($dispozitieBodies) == 0) {
$this->auctionManager->removeDispozitieInAuction($id);
$this->dispozitieBodyRepository->deleteBy($id);
$this->dispozitieHeaderRepository->remove($dispozitieHeader, true);
//delete pdf from server
$path = $this->dispozitieDir. 'dispozitie_'.$id.'.pdf';
//$path = $this->getParameter('dispozitie_directory'). 'dispozitie_'.$id.'.pdf';
try {
$this->fileManager->removeFile($path);
} catch (Exception $e) {
$this->logger->critical("DizpozitieManager: Dizpozitie PDF fizikai kitörlés nem történt meg!");
}
return true;
}
return false;
}
public function getFilteredData(Request $request)
{
$arrayDatatable = $this->projectDatatableProvider->datatableRows();
//company
if ($request->get('company') !== null) {
$arrayForm = $request->get('company');
$arrayDatatable = array_filter($arrayDatatable, function ($value) use ($arrayForm) {
return (in_array($value['company_id'], $arrayForm));
});
}
//status
if ($request->get('type') !== null) {
$arrayForm = $request->get('type');
$arrayDatatable = array_filter($arrayDatatable, function ($value) use ($arrayForm) {
return (in_array($value['project_type_id'], $arrayForm));
});
}
//status
if ($request->get('status') !== null) {
$arrayForm = $request->get('status');
$arrayDatatable = array_filter($arrayDatatable, function ($value) use ($arrayForm) {
return (in_array($value['status_id'], $arrayForm));
});
}
// end_date
if ($request->get('end_date') !== "") {
$arrayForm = $request->get('end_date');
$dateForm = explode('-', $arrayForm);
$start=trim($dateForm[0]);
if($start!="Invalid date")
{
$fromDate = date('Y-m-d H:m:s', strtotime($dateForm[0]));
$toDate = date('Y-m-d H:m:s', strtotime($dateForm[1]));
$arrayDatatable = array_filter($arrayDatatable, function ($value) use ($fromDate, $toDate) {
$dateAr = date('Y-m-d H:m:s', strtotime($value['deadline']));
return ($dateAr >= $fromDate && $dateAr <= $toDate);
});
}
}
return array_values($arrayDatatable);
}
}