diff --git a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php index e7dcd4bbf..ad3730b1a 100644 --- a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php +++ b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php @@ -19,6 +19,7 @@ use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Person; use DateTime; use Doctrine\ORM\EntityManagerInterface; +use Monolog\DateTimeImmutable; use Psr\Log\LoggerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -123,10 +124,34 @@ class ElementController extends AbstractController $results = $this->calculator->calculateDefault($elements); } + // quick solution to calculate the sum, difference and amount from + // controller. This should be done from the calculators + // TODO replace this by calculators + $wholeCharges = $actualCharges; + $wholeResources = $actualResources; + foreach ($household->getCurrentPersons() as $person) { + $wholeCharges = array_merge( + $wholeCharges, + $this->em + ->getRepository(Charge::class) + ->findByEntityAndDate($person, $now)); + $wholeResources = array_merge( + $wholeResources, + $this->em + ->getRepository(Resource::class) + ->findByEntityAndDate($person, $now)); + } + return $this->render('ChillBudgetBundle:Household:index.html.twig', [ 'household' => $household, 'charges' => $charges, 'resources' => $ressources, + 'wholeResources' => array_filter($wholeResources, function (Resource $r) use ($now) { + return $r->getStartDate() <= $now and ($r->getEndDate() === null or $r->getEndDate() >= $now); + }), + 'wholeCharges' => array_filter($wholeCharges, function (Charge $c) use ($now) { + return $c->getStartDate() <= $now and ($c->getEndDate() === null or $c->getEndDate() >= $now); + }), 'results' => $results ?? [], ]); } diff --git a/src/Bundle/ChillBudgetBundle/Menu/PersonMenuBuilder.php b/src/Bundle/ChillBudgetBundle/Menu/PersonMenuBuilder.php index bd8434a9f..047185b18 100644 --- a/src/Bundle/ChillBudgetBundle/Menu/PersonMenuBuilder.php +++ b/src/Bundle/ChillBudgetBundle/Menu/PersonMenuBuilder.php @@ -36,16 +36,16 @@ class PersonMenuBuilder implements LocalMenuBuilderInterface /** @var Person $person */ $person = $parameters['person']; - // if ($this->authorizationChecker->isGranted(BudgetElementVoter::SHOW, $person)) { - $menu->addChild( - $this->translator->trans('Budget'), - [ - 'route' => 'chill_budget_elements_index', - 'routeParameters' => ['id' => $person->getId()], - ] - ) - ->setExtra('order', 4000); - // } + if ($this->authorizationChecker->isGranted(BudgetElementVoter::SEE, $person)) { + $menu->addChild( + $this->translator->trans('Budget'), + [ + 'route' => 'chill_budget_elements_index', + 'routeParameters' => ['id' => $person->getId()], + ] + ) + ->setExtra('order', 4000); + } } public static function getMenuIds(): array diff --git a/src/Bundle/ChillBudgetBundle/Repository/ResourceRepository.php b/src/Bundle/ChillBudgetBundle/Repository/ResourceRepository.php index d82ce7a52..090d2893e 100644 --- a/src/Bundle/ChillBudgetBundle/Repository/ResourceRepository.php +++ b/src/Bundle/ChillBudgetBundle/Repository/ResourceRepository.php @@ -30,8 +30,11 @@ class ResourceRepository extends EntityRepository $entityStr = $entity instanceof Person ? 'person' : 'household'; $qb->where("c.{$entityStr} = :{$entityStr}") - ->andWhere('c.startDate < :date') - ->andWhere('c.startDate < :date OR c.startDate IS NULL'); + // TODO: in controller, the budget and charges asked are also for future and actual + //->andWhere('c.startDate < :date') + // TODO: there is a misconception here, the end date must be lower or null. startDate are never null + //->andWhere('c.startDate < :date OR c.startDate IS NULL'); + ; if (null !== $sort) { $qb->orderBy($sort); @@ -39,7 +42,7 @@ class ResourceRepository extends EntityRepository $qb->setParameters([ $entityStr => $entity, - 'date' => $date, + //'date' => $date, ]); return $qb->getQuery()->getResult(); diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_budget.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_budget.html.twig index b1e9cf9f7..6e248bf0c 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_budget.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_budget.html.twig @@ -32,65 +32,43 @@ {% endif %} {% endfor %} -{% if resources|length == 0 and charges|length == 0 %} - {#
#} - {#
-

{{ "There isn't any element recorded"|trans }}

-
#} - {#
#} +

{{ 'Actual budget'|trans }}

+ +{% if actualCharges|length > 0 or actualResources|length > 0 %} + {% include 'ChillBudgetBundle:Budget:_current_budget.html.twig' with { + 'actualResources': actualResources, + 'actualCharges': actualCharges, + 'results': results, + 'entity': entity + } %} {% else %} - -

{{ 'Actual budget'|trans }}

- - {% if actualCharges|length > 0 or actualResources|length > 0 %} - {% include 'ChillBudgetBundle:Budget:_current_budget.html.twig' with { - 'actualResources': actualResources, - 'actualCharges': actualCharges, - 'results': results, - 'entity': entity - } %} - {% else %} -
-
-

{{ "There isn't any element recorded"|trans }}

-
+
+
+

{{ "There isn't any element recorded"|trans }}

- {% endif %} - +
{% endif %} +{% if pastCharges|length > 0 or pastResources|length > 0 %}

{{ 'Past budget'|trans }}

- {% if pastCharges|length > 0 or pastResources|length > 0 %} - {% include 'ChillBudgetBundle:Budget:_past_budget.html.twig' with { - 'pastCharges': pastCharges, - 'pastResources': pastResources, - 'entity': entity - } %} - {% else %} -
-
-

{{ "There isn't any element recorded"|trans }}

-
-
- {% endif %} + {% include 'ChillBudgetBundle:Budget:_past_budget.html.twig' with { + 'pastCharges': pastCharges, + 'pastResources': pastResources, + 'entity': entity + } %} +{% endif %} +{% if futureCharges|length > 0 or futureResources|length > 0 %}

{{ 'Future budget'|trans }}

- {% if futureCharges|length > 0 or futureResources|length > 0 %} - {% include 'ChillBudgetBundle:Budget:_future_budget.html.twig' with { - 'futureResources': futureResources, - 'futureCharges': futureCharges, - 'entity': entity - } %} - {% else %} -
-
-

{{ "There isn't any element recorded"|trans }}

-
-
- {% endif %} + {% include 'ChillBudgetBundle:Budget:_future_budget.html.twig' with { + 'futureResources': futureResources, + 'futureCharges': futureCharges, + 'entity': entity + } %} +{% endif %} diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_current_budget.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_current_budget.html.twig index 2fc07839a..b996da211 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_current_budget.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_current_budget.html.twig @@ -3,7 +3,7 @@ {#

{{ 'Actual budget'|trans }}

#}
-

{{ 'Actual resources'|trans }}

+

{{ 'Actual resources'|trans }}

{% if actualResources|length > 0 %}
@@ -17,6 +17,7 @@
+

{{ 'Actual charges'|trans }}

{% if actualCharges|length > 0 %}
{{ table_elements(actualCharges, 'charge') }} @@ -26,4 +27,4 @@ {{ 'No charges registered'|trans }}
{% endif %} -
\ No newline at end of file +
diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_macros.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_macros.html.twig index 000644985..41b6f36df 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_macros.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Budget/_macros.html.twig @@ -14,7 +14,10 @@ {% set total = total + f.amount %} - {{ f.type|budget_element_type_display(family) }} + + + {{ f.type|budget_element_type_display(family) }} + {{ f.amount|format_currency('EUR') }} @@ -91,4 +94,4 @@ -{% endmacro %} \ No newline at end of file +{% endmacro %} diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Charge/edit.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Charge/edit.html.twig index 128306b2a..fed80a5c0 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Charge/edit.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Charge/edit.html.twig @@ -35,7 +35,7 @@
  • - {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Edit' } ) }} + {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-edit' }, 'label': 'Edit' } ) }}
  • diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Household/index.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Household/index.html.twig index 9a8216284..2596059b9 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Household/index.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Household/index.html.twig @@ -24,9 +24,9 @@ } %}
    -

    {{ 'Budget calculator'|trans }}

    +

    {{ 'Budget calculator'|trans }}

    - {{ table_results(charges, resources) }} + {{ table_results(wholeCharges, wholeResources) }}
    @@ -45,7 +45,7 @@ data-bs-target="#collapse_{{ member.id }}" aria-expanded="false" aria-controls="collapse_{{ member.id }}"> - {{ 'Show budget of %name%'|trans({'%name%': member.firstName ~ " " ~ member.lastName }) }} + {{ 'Show budget of %name%'|trans({'%name%': member.firstName ~ " " ~ member.lastName }) }} ({{ 'budget.number of elements'|trans({ 'nb_items': member.getBudgetResources|length + member.getBudgetResources|length }) }}) {{ 'Hide budget of %name%'|trans({'%name%': member.firstName ~ " " ~ member.lastName }) }} diff --git a/src/Bundle/ChillBudgetBundle/Resources/views/Resource/edit.html.twig b/src/Bundle/ChillBudgetBundle/Resources/views/Resource/edit.html.twig index 1dc2245f6..8b051eeaf 100644 --- a/src/Bundle/ChillBudgetBundle/Resources/views/Resource/edit.html.twig +++ b/src/Bundle/ChillBudgetBundle/Resources/views/Resource/edit.html.twig @@ -36,7 +36,7 @@
  • - {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Edit' } ) }} + {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-edit' }, 'label': 'Edit' } ) }}
  • diff --git a/src/Bundle/ChillBudgetBundle/config/services/menu.yaml b/src/Bundle/ChillBudgetBundle/config/services/menu.yaml index 7f5df68ec..34128519b 100644 --- a/src/Bundle/ChillBudgetBundle/config/services/menu.yaml +++ b/src/Bundle/ChillBudgetBundle/config/services/menu.yaml @@ -1,9 +1,8 @@ services: Chill\BudgetBundle\Menu\PersonMenuBuilder: autowire: true - tags: - - { name: 'chill.menu_builder' } + autoconfigure: true + Chill\BudgetBundle\Menu\HouseholdMenuBuilder: autowire: true - tags: - - { name: 'chill.menu_builder' } + autoconfigure: true diff --git a/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.fr.yml b/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.fr.yml new file mode 100644 index 000000000..4ab002e02 --- /dev/null +++ b/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.fr.yml @@ -0,0 +1,8 @@ +budget: + number of elements: >- + {nb_items, plural, + =0 {Aucun élément} + one {Un élément} + many {# éléments} + other {# éléments} + } diff --git a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml index aadfb3fe6..1ccdcf1e6 100644 --- a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml @@ -2,8 +2,8 @@ Budget: Budget Resource: Ressource Charge: Charge Budget for %name%: Budget de %name% -Budget for household %household%: Budget de ménage %household% -Current budget household members: Budgets actuelles des membres du ménage +Budget for household %household%: Budget du ménage +Current budget household members: Budget actuel des membres du ménage Show budget of %name%: Montrer budget de %name% See complete budget: Voir budget complet Hide budget: Masquer @@ -29,7 +29,7 @@ End of validity period: Fin de la période de validité Total: Total Create new resource: Créer une nouvelle ressource Create new charge: Créer une nouvelle charge -See person: Voir person +See person: Voir personne There isn't any element recorded: Aucun élément enregistré No resources registered: Aucune ressource enregistrée @@ -70,7 +70,7 @@ charge.help.not-concerned: Non concerné Budget calculator: Calculs et indices sur le budget Budget calculator result: Résultats -The balance: Le solde budgétaire +The balance: Différence entre ressources et charges Valid since %startDate% until %endDate%: Valide depuis le %startDate% jusqu'au %endDate% -Valid since %startDate%: Valide depuis le %startDate% \ No newline at end of file +Valid since %startDate%: Valide depuis le %startDate% diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 7f991ecda..3b915c9d6 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -159,8 +159,6 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI private $birthdate; /** - * Read-only field, computed by the database. - * * @ORM\OneToMany( * targetEntity=Charge::class, * mappedBy="person" @@ -169,8 +167,6 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI private Collection $budgetCharges; /** - * Read-only field, computed by the database. - * * @ORM\OneToMany( * targetEntity=Resource::class, * mappedBy="person"