diff --git a/src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php b/src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php index c8c610257..f468bd18a 100644 --- a/src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php +++ b/src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php @@ -56,10 +56,18 @@ abstract class AbstractElementController extends Controller protected function _delete(AbstractElement $element, Request $request, $template, $flashMessage): Response { $this->denyAccessUnlessGranted(BudgetElementVoter::DELETE, $element, 'You are not ' - . 'allowed to delete this family membership'); + . 'allowed to delete this item'); $form = $this->createDeleteForm(); + if (null != $element->getPerson()) { + $entity = $element->getPerson(); + $indexPage = 'chill_budget_elements_index'; + } else { + $entity = $element->getHousehold(); + $indexPage = 'chill_budget_elements_household_index'; + } + if ($request->getMethod() === Request::METHOD_DELETE) { $form->handleRequest($request); @@ -79,8 +87,8 @@ abstract class AbstractElementController extends Controller $this->addFlash('success', $this->translator ->trans($flashMessage)); - return $this->redirectToRoute('chill_budget_elements_index', [ - 'id' => $element->getPerson()->getId(), + return $this->redirectToRoute($indexPage, [ + 'id' => $entity->getId(), ]); } } @@ -99,6 +107,18 @@ abstract class AbstractElementController extends Controller { $this->denyAccessUnlessGranted(BudgetElementVoter::UPDATE, $element); + if (null != $element->getPerson()) { + $entity = $element->getPerson(); + $entityStr = 'person'; + $indexPage = 'chill_budget_elements_index'; + } else { + $entity = $element->getHousehold(); + $entityStr = 'household'; + $indexPage = 'chill_budget_elements_household_index'; + } + + $entity = null != $element->getPerson() ? : $element->getHousehold(); + $form = $this->createForm($this->getType(), $element); $form->add('submit', SubmitType::class); @@ -110,15 +130,15 @@ abstract class AbstractElementController extends Controller $this->addFlash('success', $this->translator->trans($flashOnSuccess)); - return $this->redirectToRoute('chill_budget_elements_index', [ - 'id' => $element->getPerson()->getId(), + return $this->redirectToRoute($indexPage, [ + 'id' => $entity->getId(), ]); } return $this->render($template, [ 'element' => $element, 'form' => $form->createView(), - 'person' => $element->getPerson(), + $entityStr => $entity, ]); } @@ -126,13 +146,22 @@ abstract class AbstractElementController extends Controller * @param mixed $template * @param mixed $flashMessageOnSuccess */ - protected function _new(Person $person, Request $request, $template, $flashMessageOnSuccess) + protected function _new($entity, Request $request, $template, $flashMessageOnSuccess) { /** @var AbstractElement $element */ - $element = $this->createNewElement() - ->setPerson($person); + $element = new AbstractElement(); - $this->denyAccessUnlessGranted(BudgetElementVoter::CREATE, $element); + if ($entity instanceof Person) { + $element->setPerson($entity); + $entityStr = 'person'; + $indexPage = 'chill_budget_elements_index'; + } else { + $element->setHousehold($entity); + $entityStr = 'household'; + $indexPage = 'chill_budget_elements_household_index'; + } + + $this->denyAccessUnlessGranted(BudgetElementVoter::CREATE, $entity); $form = $this->createForm($this->getType(), $element); $form->add('submit', SubmitType::class); @@ -146,8 +175,8 @@ abstract class AbstractElementController extends Controller $this->addFlash('success', $this->translator->trans($flashMessageOnSuccess)); - return $this->redirectToRoute('chill_budget_elements_index', [ - 'id' => $person->getId(), + return $this->redirectToRoute($indexPage, [ + 'id' => $entity->getId(), ]); } @@ -157,7 +186,7 @@ abstract class AbstractElementController extends Controller return $this->render($template, [ 'form' => $form->createView(), - 'person' => $person, + $entityStr => $entity, 'element' => $element, ]); } diff --git a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php index 132caa557..9f6f14faa 100644 --- a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php +++ b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php @@ -15,6 +15,7 @@ use Chill\BudgetBundle\Calculator\CalculatorManager; use Chill\BudgetBundle\Entity\Charge; use Chill\BudgetBundle\Entity\Resource; use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter; +use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Person; use DateTime; use Doctrine\ORM\EntityManagerInterface; @@ -28,25 +29,13 @@ use function count; class ElementController extends Controller { - /** - * @var CalculatorManager - */ - protected $calculator; + protected CalculatorManager $calculator; - /** - * @var LoggerInterface - */ - protected $chillMainLogger; + protected LoggerInterface $chillMainLogger; - /** - * @var EntityManagerInterface - */ - protected $em; + protected EntityManagerInterface $em; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct( EntityManagerInterface $em, @@ -68,11 +57,12 @@ class ElementController extends Controller */ public function indexAction(Person $person) { - // $this->denyAccessUnlessGranted(BudgetElementVoter::SHOW, $person); + $this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $person); $charges = $this->em ->getRepository(Charge::class) ->findByPerson($person); + $ressources = $this->em ->getRepository(Resource::class) ->findByPerson($person); @@ -81,10 +71,10 @@ class ElementController extends Controller $actualCharges = $this->em ->getRepository(Charge::class) - ->findByPersonAndDate($person, $now); + ->findByEntityAndDate($person, $now); $actualResources = $this->em ->getRepository(Resource::class) - ->findByPersonAndDate($person, $now); + ->findByEntityAndDate($person, $now); $elements = array_merge($actualCharges, $actualResources); @@ -92,11 +82,52 @@ class ElementController extends Controller $results = $this->calculator->calculateDefault($elements); } - return $this->render('ChillBudgetBundle:Element:index.html.twig', [ + return $this->render('ChillBudgetBundle:Person:index.html.twig', [ 'person' => $person, 'charges' => $charges, 'resources' => $ressources, 'results' => $results ?? [], ]); } + + /** + * @Route( + * "{_locale}/budget/elements/by-household/{id}", + * name="chill_budget_elements_household_index" + * ) + */ + public function indexHouseholdAction(Household $household) + { + // $this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $household); + + $charges = $this->em + ->getRepository(Charge::class) + ->findByHousehold($household); + + $ressources = $this->em + ->getRepository(Resource::class) + ->findByHousehold($household); + + $now = new DateTime('now'); + + $actualCharges = $this->em + ->getRepository(Charge::class) + ->findByEntityAndDate($household, $now); + $actualResources = $this->em + ->getRepository(Resource::class) + ->findByEntityAndDate($household, $now); + + $elements = array_merge($actualCharges, $actualResources); + + if (count($elements) > 0) { + $results = $this->calculator->calculateDefault($elements); + } + + return $this->render('ChillBudgetBundle:Household:index.html.twig', [ + 'household' => $household, + 'charges' => $charges, + 'resources' => $ressources, + 'results' => $results ?? [], + ]); + } } diff --git a/src/Bundle/ChillBudgetBundle/Controller/ElementHouseholdController.php b/src/Bundle/ChillBudgetBundle/Controller/ElementHouseholdController.php deleted file mode 100644 index 6d7da0ef6..000000000 --- a/src/Bundle/ChillBudgetBundle/Controller/ElementHouseholdController.php +++ /dev/null @@ -1,104 +0,0 @@ -em = $em; - $this->translator = $translator; - $this->chillMainLogger = $chillMainLogger; - $this->calculator = $calculator; - } - - /** - * @Route( - * "{_locale}/budget/elements/by-household/{household_id}", - * name="chill_person_household_budget_index" - * ) - */ - public function indexAction(Household $household) - { - // $this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $household); - - // $charges = $this->em - // ->getRepository(Charge::class) - // ->findByPerson($person); - // $ressources = $this->em - // ->getRepository(Resource::class) - // ->findByPerson($person); - - // $now = new DateTime('now'); - - // $actualCharges = $this->em - // ->getRepository(Charge::class) - // ->findByPersonAndDate($person, $now); - // $actualResources = $this->em - // ->getRepository(Resource::class) - // ->findByPersonAndDate($person, $now); - - // $elements = array_merge($actualCharges, $actualResources); - - // if (count($elements) > 0) { - // $results = $this->calculator->calculateDefault($elements); - // } - - // return $this->render('ChillBudgetBundle:Element:index.html.twig', [ - // 'person' => $person, - // 'charges' => $charges, - // 'resources' => $ressources, - // 'results' => $results ?? [], - // ]); - - return 'hello world'; - } -} \ No newline at end of file diff --git a/src/Bundle/ChillBudgetBundle/Controller/ResourceController.php b/src/Bundle/ChillBudgetBundle/Controller/ResourceController.php index f56a5d6c2..69e53c415 100644 --- a/src/Bundle/ChillBudgetBundle/Controller/ResourceController.php +++ b/src/Bundle/ChillBudgetBundle/Controller/ResourceController.php @@ -13,6 +13,7 @@ namespace Chill\BudgetBundle\Controller; use Chill\BudgetBundle\Entity\Resource; use Chill\BudgetBundle\Form\ResourceType; +use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Person; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Request; @@ -53,6 +54,8 @@ class ResourceController extends AbstractElementController } /** + * Create a new budget element for a person + * * @Route( * "{_locale}/budget/resource/by-person/{id}/new", * name="chill_budget_resource_new" @@ -68,6 +71,24 @@ class ResourceController extends AbstractElementController ); } + /** + * Create new budget element for a household + * + * @Route( + * "{_locale}/budget/resource/by-household/{id}/new", + * name="chill_budget_resource_new" + * ) + */ + public function newHouseholdAction(Request $request, Household $household): Response + { + return $this->_new( + $household, + $request, + '@ChillBudget/Resource/new.html.twig', + 'Resource created' + ); + } + /** * @Route( * "{_locale}/budget/resource/{id}/view",