<?php
/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Entity\Sold;
use App\Entity\Users;
use App\Entity\Zone;
use App\Form\Type\SoldFormType;
use App\Helper\RoleHelper;
use App\Manager\DashboardManager;
use App\Manager\RequestParamsManager;
use App\Manager\RoleManager;
use App\Manager\ZoneManager;
use Doctrine\ORM\EntityManager;
use Faker\Provider\ka_GE\DateTime;
use App\Manager\UserManager;
use FOS\UserBundle\Model\UserManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\UserBundle\Controller\ProfileController as BaseController;
use Psr\Log\LoggerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Controller managing sold nano entrepreneur.
*
*/
class SoldController extends BaseController
{
private $eventDispatcher;
private $userManager;
private $zoneManager;
private $dashboardManager;
private $requestParamsManager;
protected $container;
public function __construct(
DashboardManager $dashboardManager,
UserManager $userManager,
ZoneManager $zoneManager,
RequestParamsManager $requestParamsManager,
ContainerInterface $container
) {
$this->userManager = $userManager;
$this->zoneManager = $zoneManager;
$this->dashboardManager = $dashboardManager;
$this->requestParamsManager = $requestParamsManager;
$this->container = $container;
}
/**
* @param Request $request
* @param RoleHelper $roleHelper
*/
public function addSoldAction(
Request $request,
RoleHelper $roleHelper,
EntityManager $em,
TranslatorInterface $translatorInterface
) {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->isGranted(RoleManager::ROLE_EQUIPE, $this->getUser())) {
$this->addFlash('error', $translatorInterface->trans('You are not authorized to access this section'));
return $this->redirectToRoute('app.home');
}
$em = $this->container->get('doctrine')->getManager();
$formattedRoles = $roleHelper->getReachableRoles($this->getUser()->getRoles());
if ($this->isGranted(RoleManager::ROLE_SUPER_ADMIN)) {
$roles = array_keys($this->getParameter('security.role_hierarchy.roles'));
$formattedRoles = $roleHelper->getReachableRoles($roles);
}
$form = $this->createForm(SoldFormType::class, new Sold(), []);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var Users $user */
$sold = $form->getData();
try {
$sold->setUser($this->getUser());
$dataRequest = $request->request->get("sold_form");
$userNanoId = $dataRequest["userNano"];
$oUserNano = $em->getRepository('App\Entity\NanoEntrepreneur')->findOneBy(['owner' => $userNanoId]);
$sold->setNanoEntrepreneur($oUserNano);
$em->persist($sold);
$em->flush();
$this->addFlash('success', $translatorInterface->trans('The balance has been created successfully'));
return $this->redirectToRoute('app.solde.list');
} catch (ExistingDefaultEntrepreneurException $e) {
$this->addFlash('error', $e->getMessage());
}
}
return $this->render('@App/Solde/form.html.twig', [
'form' => $form->createView(),
'pageTitle' => $translatorInterface->trans('Creation of a balance nano-entrepreneur')
]);
}
/**
* @param EntityManager $em
* @param null $role
* @return RedirectResponse|Response
* @throws \Doctrine\ORM\ORMException
*/
public function listAction(EntityManager $em, $role = null, TranslatorInterface $translatorInterface)
{
$solds = $em->getRepository('App\Entity\Sold')->findAll();
$allDistrict = $em->getRepository(Zone::class)->getDistrict();
return $this->render('@App/Solde/list.html.twig', [
"soldes" => $solds,
'districts' => $allDistrict,
'profile' => $role,
'pageTitle' => $translatorInterface->trans('Expenses and products')
]);
}
/**
* @param Request $request
* @param Users|null $user
* @param RoleHelper $roleHelper
* @param UserManager $userManager
* @return RedirectResponse|Response
*
*/
public function editSoldAction(
Request $request,
Sold $sold = null,
LoggerInterface $logger,
TranslatorInterface $translatorInterface
) {
$this->denyAccessUnlessGranted(RoleManager::ROLE_SUPER_ADMIN, $this->getUser());
$form = $this->createForm(SoldFormType::class, $sold, ['dateApplication' => $sold->getDateApplication()]);
$form->handleRequest($request);
$em = $this->container->get('doctrine')->getManager();
if ($form->isSubmitted() && $form->isValid()) {
try {
$dataRequest = $request->request->get("sold_form");
$userNanoId = $dataRequest["userNano"];
$oUserNano = $em->getRepository('App\Entity\NanoEntrepreneur')->findOneBy(['owner' => $userNanoId]);
$sold->setNanoEntrepreneur($oUserNano);
$em->persist($sold);
$em->flush();
} catch (\Exception $e) {
$logger->error($e->getMessage(), [__CLASS__ => __FUNCTION__]);
$this->addFlash('error', "Une exception a été levée pendant l'ajout");
return $this->render('@App/Solde/form.html.twig', [
'form' => $form->createView(),
'pageTitle' => $translatorInterface->trans('Adding a sold'),
]);
}
$this->addFlash('success', 'The balance was successfully modified');
return $this->redirectToRoute('app.solde.list');
}
return $this->render('Solde/form.html.twig', [
'form' => $form->createView(),
'pageTitle' => $translatorInterface->trans('Editing a sold') . " : ",
'sold' => $sold
]);
}
/**
* @param Request $request
* @param EntityManager $em
* @return JsonResponse|RedirectResponse
*/
public function deleteAction(Request $request, Sold $sold, TranslatorInterface $trans)
{
$this->denyAccessUnlessGranted(RoleManager::ROLE_SUPER_ADMIN, $this->getUser());
try {
$em = $this->container->get('doctrine')->getManager();
$em->remove($sold);
$em->flush();
$message = $trans->trans('Balance successfully removed');
$title = $trans->trans('Deleted');
$class = 'success';
} catch (\Exception $e) {
$message = $e->getMessage();
$title = 'Erreur';
$class = 'warning';
}
return new JsonResponse([
'message' => $message,
'title' => $title,
'class' => $class,
]);
}
public function listSyntheseAction(EntityManager $em, Request $request, $role = null, TranslatorInterface $translatorInterface)
{
$queryParams = [];
$em = $this->container->get('doctrine')->getManager();
//$queryParams['queryParams'] = $this->requestParamsManager->initQueryParams($request);
if (!empty($request->query->get('FilterStart')) && !empty($request->query->get('FilterEnd'))) {
$sDateDebut = \DateTime::createFromFormat("d/m/Y", $request->query->get('FilterStart'));
$sDateFin = \DateTime::createFromFormat("d/m/Y", $request->query->get('FilterEnd'));
$queryParams['queryParams']['dateDebut'] = $sDateDebut; //date_format(date_create($sDateDebut), 'd/m/Y'); //
$queryParams['queryParams']['dateFin'] = $sDateFin; //date_format(date_create($sDateFin), 'd/m/Y');
$queryParams['queryParams']['dateFilter'] = $sDateDebut; //date_format(date_create($sDateDebut),"d/m/Y");
}
$aDate = $this->dashboardManager->getIntervalDate(new \DateTime(), "quinze");
$queryParams['current_start_date'] = $queryParams['queryParams']['dateDebut'] ?? $aDate['startDate']->format('Y-m-d');
$queryParams['current_end_date'] = $queryParams['queryParams']['dateFin'] ?? $aDate['endDate']->format('Y-m-d');
$users = $em->getRepository(Users::class)->getNanoEntrepeneurSold($queryParams);
$zonesTypes = $this->zoneManager->getZonesTypes($users);
$allDistrict = $this->zoneManager->getDistrictByZone($zonesTypes['zones']);
return $this->render('@App/Solde/synthese.html.twig', [
'profile' => $role,
'users' => $users,
'pageTitle' => $translatorInterface->trans('Synthesis'),
'current_start_date' => (isset($sDateDebut)) ? $sDateDebut : $queryParams['current_start_date'],
'current_end_date' => (isset($sDateFin)) ? $sDateFin : $queryParams['current_end_date'],
'districts' => $allDistrict
]);
}
}