<?php
namespace App\Controller\JIT;
use App\Common\Controller\DefaultController;
use App\Entity\JIT\Person;
use App\Entity\JIT\Property;
use App\Entity\JIT\Search;
use App\Form\JIT\PersonP2Type;
use App\Form\JIT\PropertyPType;
use App\Repository\JIT\MovementRepository;
use App\Repository\JIT\PersonRepository;
use App\Repository\JIT\PropertyRepository;
use App\Service\Logger;
use App\Service\Uploader\PersonIdentityUploader;
use App\Service\Uploader\PictureUploader;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @Route("/jit/dashboard")
*/
class DashboardController extends DefaultController {
protected $menu = 10;
protected $limit = 4;
/**
* @Route("/", name="pr_jit_dashboard_index", methods="GET")
* @Route("/", name="jit_index", methods="GET")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function index(): Response {
$cuser = $this->getUser();
if($cuser->getPerson() === null && $cuser->isSelfOwner()){
return $this->redirectToRoute('pr_jit_dashboard_start1');
}
return $this->render('jit/dashboard/default.html.twig', [
'menu' => $this->menu,
]);
}
/**
* @Route("/account", name="pr_jit_dashboard_account", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function account(MovementRepository $mRepository, Request $request): Response {
// creates a task object and initializes some data for this example
$search = new Search();
$form = $this->createFormBuilder($search)
->add('startDate', DateType::class, [
'required' => false,
'widget' => 'single_text',
])
->add('endDate', DateType::class, [
'required' => false,
'widget' => 'single_text',
])
->getForm();
$form->handleRequest($request);
$start = null;
$end = null;
if ($form->isSubmitted() && $form->isValid()) {
$start = $search->getStartDate();
$end = $search->getEndDate();
}
$accounts = $this->getUser()->getAccounts();
$movements = $mRepository->findByAccounts($accounts, $start, $end);
return $this->render('jit/dashboard/account.html.twig', [
'menu' => $this->menu,
'form' => $form->createView(),
'movements' => $movements,
]);
}
/**
* @Route("/property", name="pr_jit_dashboard_property", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function property(TranslatorInterface $translator): Response {
return $this->render('jit/dashboard/property.html.twig', [
'menu' => $this->menu,
]);
}
/**
* @Route("/start", name="pr_jit_dashboard_start", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function start(TranslatorInterface $translator): Response {
return $this->render('jit/dashboard/start.html.twig', [
'menu' => $this->menu,
]);
}
/**
* @Route("/document", name="pr_jit_dashboard_document", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function document(TranslatorInterface $translator): Response {
return $this->render('jit/dashboard/document.html.twig', [
'menu' => $this->menu,
]);
}
/**
* @Route("/start1", name="pr_jit_dashboard_start1", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function addPersonP(PersonRepository $repository, Request $request, PersonIdentityUploader $fileUploader, TranslatorInterface $translator, Logger $logger): Response {
$cuser = $this->getUser();
if($cuser->getPerson() !== null){
return $this->redirectToRoute('pr_jit_dashboard_index');
}
$person = new Person();
$person->setPfl(Person::PROFIL_PROPRITAIRE);
$person->setAccount($cuser);
$person->setFnm($cuser->getFullname());
$person->setEmail($cuser->getEmail());
$person->setTel1($cuser->getPhone());
$form = $this->createForm(PersonP2Type::class, $person, ['user' => $cuser]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Save Identity file
$file = $person->getIFile();
if ($file) {
$newFileName = $fileUploader->upload($file);
$person->setIdf($newFileName);
}
//Save Picture file
$pfile = $person->getPFile();
if ($pfile) {
$newFileName = $fileUploader->upload($pfile);
$person->setPicture($newFileName);
}
//Add User
if ($form->get('createUser')->getData()) {
$person->createUser();
}
$repository->add($person, true);
$logger->logging($this->getUser(), $person, Logger::ACTION_ADD);
$this->addFlash('success', $translator->trans('tt_message.add_successfully'));
return $this->redirectToRoute('pr_jit_dashboard_start2');
} else {
$logger->logging($this->getUser(), $person, Logger::ACTION_ADD_FORM);
}
return $this->render('jit/dashboard/start1.html.twig', [
'our_form' => $form->createView(),
'menu' => $this->menu,
]);
}
/**
* @Route("/start2", name="pr_jit_dashboard_start2", methods="GET|POST")
*
* @Security("is_granted('ROLE_JIT_DASHBOARD_INDEX')")
*/
public function addProperty(PropertyRepository $repository, PictureUploader $fileUploader, Request $request, TranslatorInterface $translator, Logger $logger): Response {
$cuser = $this->getUser();
$person = $cuser->getPerson();
if($person === null && $cuser->isSelfOwner()){
return $this->redirectToRoute('pr_jit_dashboard_start1');
}
$property = new Property();
$property->setOwner($person);
$form = $this->createForm(PropertyPType::class, $property, ['person' => $property->getOwner()]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Save Pictures
$pictures = $property->getPictures();
foreach ($pictures as $picture) {
$file = $picture->getImage();
if ($file) {
$newImg = $fileUploader->upload($file);
$picture->setImg($newImg);
$logger->logging($this->getUser(), $picture, Logger::ACTION_ADD);
}
}
$repository->add($property, true);
$logger->logging($this->getUser(), $property, Logger::ACTION_ADD);
$this->addFlash('success', $translator->trans('tt_message.add_successfully'));
return $this->redirectToRoute('pr_jit_dashboard_index');
} else {
$logger->logging($this->getUser(), $property, Logger::ACTION_ADD_FORM);
}
return $this->render('jit/dashboard/start2.html.twig', [
'our_form' => $form->createView(),
'menu' => $this->menu,
]);
}
}