Commit 011398af by Damien Moulard

WIP calculate allocation with simplified household process

parent c715bd64
...@@ -50,6 +50,7 @@ PRESTA_SELF_INIT_AND_EVAL=0 ...@@ -50,6 +50,7 @@ PRESTA_SELF_INIT_AND_EVAL=0
AUTOMATISATION_RECONVERSION=0 AUTOMATISATION_RECONVERSION=0
PRESTA_EXTRA_DATA=0 PRESTA_EXTRA_DATA=0
HOUSEHOLD_BASED_ALLOWANCE=0 HOUSEHOLD_BASED_ALLOWANCE=0
SIMPLIFIED_HOUSEHOLD_BASED_ALLOWANCE=0
SSA_FRIENDLY_FLUX_TYPE_NAMES=0 SSA_FRIENDLY_FLUX_TYPE_NAMES=0
CCAS_MODE=0 CCAS_MODE=0
EXTRA_SECURITY_ADMIN_PASSWORD=ChangeMe EXTRA_SECURITY_ADMIN_PASSWORD=ChangeMe
......
...@@ -57,7 +57,8 @@ Copier le fichier .env.dist en .env et configurer : ...@@ -57,7 +57,8 @@ Copier le fichier .env.dist en .env et configurer :
- en environnement TAV, pour activer le parcours d'inscription autonomisé qui intègre la réponse à une questionnaire d'auto-évaluation pour les points de vente, passer PRESTA_SELF_INIT_AND_EVAL à 1 - en environnement TAV, pour activer le parcours d'inscription autonomisé qui intègre la réponse à une questionnaire d'auto-évaluation pour les points de vente, passer PRESTA_SELF_INIT_AND_EVAL à 1
- en environnement TAV, la variable AUTOMATISATION_RECONVERSION permet d'activer l'automatisation des reconversions - en environnement TAV, la variable AUTOMATISATION_RECONVERSION permet d'activer l'automatisation des reconversions
- en environnement TAV, la variable PRESTA_EXTRA_DATA permet d'indiquer puis d'afficher publiquement plus de données concernant les prestataires (e.g. familles de produits) - en environnement TAV, la variable PRESTA_EXTRA_DATA permet d'indiquer puis d'afficher publiquement plus de données concernant les prestataires (e.g. familles de produits)
- en environnement TAV, la variable HOUSEHOLD_BASED_ALLOWANCE permet d'activer un mode de cotisations libres et d'allocations basées sur la composition du foyer - en environnement TAV, la variable HOUSEHOLD_BASED_ALLOWANCE permet d'activer un mode de cotisation libre (avec valeur minimum) et d'allocations basées sur la composition du foyer. Active également la possibilité pour l'admin de renseigner un quartier ainsi qu'un territoire à une fiche adhérent, ainsi que la possibilité de corriger le solde d'un adhérent.
- en environnement TAV, la variable SIMPLIFIED_HOUSEHOLD_BASED_ALLOWANCE permet d'activer un mode simplifié d'allocation en fonction de la composition du foyer (pas de minimum de cotisation, moins de détails dans la composition du foyer de l'adhérent, pas de renseignement de territoire dans la fiche adhérent, calcul de l'allocation simplifié). /!\ Requiert l'activation de HOUSEHOLD_BASED_ALLOWANCE.
- en environnement TAV, la variable SSA_FRIENDLY_FLUX_TYPE_NAMES permet d'adapter le nommage des types de flux et les écrans de visualisation des flux à un projet de type SSA - en environnement TAV, la variable SSA_FRIENDLY_FLUX_TYPE_NAMES permet d'adapter le nommage des types de flux et les écrans de visualisation des flux à un projet de type SSA
- en environnement TAV, la varialble CCAS_MODE permet d'activer les fonctionnalités de branchement avec une CCAS. Attention : Pour activer CCAS_MODE, le paramètre AUTOMATISATION_RECONVERSION doit OBLIGATOIREMENT être activé. - en environnement TAV, la varialble CCAS_MODE permet d'activer les fonctionnalités de branchement avec une CCAS. Attention : Pour activer CCAS_MODE, le paramètre AUTOMATISATION_RECONVERSION doit OBLIGATOIREMENT être activé.
......
...@@ -17,6 +17,7 @@ parameters: ...@@ -17,6 +17,7 @@ parameters:
automatisation_reconversion: '%env(AUTOMATISATION_RECONVERSION)%' automatisation_reconversion: '%env(AUTOMATISATION_RECONVERSION)%'
presta_extra_data: '%env(PRESTA_EXTRA_DATA)%' presta_extra_data: '%env(PRESTA_EXTRA_DATA)%'
household_based_allowance: '%env(HOUSEHOLD_BASED_ALLOWANCE)%' household_based_allowance: '%env(HOUSEHOLD_BASED_ALLOWANCE)%'
simplified_household_based_allowance: '%env(SIMPLIFIED_HOUSEHOLD_BASED_ALLOWANCE)%'
ssa_friendly_flux_type_names: '%env(SSA_FRIENDLY_FLUX_TYPE_NAMES)%' ssa_friendly_flux_type_names: '%env(SSA_FRIENDLY_FLUX_TYPE_NAMES)%'
extra_security_admin_password: '%env(EXTRA_SECURITY_ADMIN_PASSWORD)%' extra_security_admin_password: '%env(EXTRA_SECURITY_ADMIN_PASSWORD)%'
ccas_mode: '%env(CCAS_MODE)%' ccas_mode: '%env(CCAS_MODE)%'
......
...@@ -175,7 +175,11 @@ class FluxAdmin extends AbstractAdmin ...@@ -175,7 +175,11 @@ class FluxAdmin extends AbstractAdmin
]) ])
; ;
if($this->getConfigurationPool()->getContainer()->getParameter('household_based_allowance')) { // In household based allowance (but not simplified) add filter on adherent territory
$household_based_allowance = $this->getConfigurationPool()->getContainer()->getParameter('household_based_allowance');
$simplified_household_based_allowance = $this->getConfigurationPool()->getContainer()->getParameter('simplified_household_based_allowance');
if($household_based_allowance && !$simplified_household_based_allowance) {
$datagridMapper->add('territory', CallbackFilter::class, [ $datagridMapper->add('territory', CallbackFilter::class, [
'callback' => [$this, 'getTerritoryFilter'], 'callback' => [$this, 'getTerritoryFilter'],
'field_type' => SChoiceType::class, 'field_type' => SChoiceType::class,
......
...@@ -70,7 +70,12 @@ class OperationAdherentAdmin extends OperationAdmin ...@@ -70,7 +70,12 @@ class OperationAdherentAdmin extends OperationAdmin
'advanced_filter' => false, 'advanced_filter' => false,
'show_filter' => true, 'show_filter' => true,
]); ]);
if($this->getConfigurationPool()->getContainer()->getParameter('household_based_allowance')) {
// In household based allowance (but not simplified) add filter on adherent territory
$household_based_allowance = $this->getConfigurationPool()->getContainer()->getParameter('household_based_allowance');
$simplified_household_based_allowance = $this->getConfigurationPool()->getContainer()->getParameter('simplified_household_based_allowance');
if($household_based_allowance && !$simplified_household_based_allowance) {
$datagridMapper->add('account.adherent.geoloc.subterritory', null, [ $datagridMapper->add('account.adherent.geoloc.subterritory', null, [
'label' => 'Territoire', 'label' => 'Territoire',
'advanced_filter' => false, 'advanced_filter' => false,
......
...@@ -138,7 +138,11 @@ class UserAdherentController extends FluxController ...@@ -138,7 +138,11 @@ class UserAdherentController extends FluxController
if (true == $this->getParameter('household_based_allowance')) { if (true == $this->getParameter('household_based_allowance')) {
$cotisationAmount = $destinataire->getCotisationAmount(); $cotisationAmount = $destinataire->getCotisationAmount();
if (is_null($cotisationAmount) || is_null($destinataire->getHouseholdAdultCount())) { if (
is_null($cotisationAmount)
|| is_null($destinataire->getHouseholdAdultCount()) && !$this->getParameter('simplified_household_based_allowance')
|| is_null($destinataire->getHouseholdCount()) && $this->getParameter('simplified_household_based_allowance')
) {
return "Opération impossible : votre profil est incomplet, informations de cotisation manquantes. Veuillez contacter un administrateur."; return "Opération impossible : votre profil est incomplet, informations de cotisation manquantes. Veuillez contacter un administrateur.";
} }
} else { } else {
......
...@@ -221,7 +221,11 @@ class UserComptoirController extends FluxController ...@@ -221,7 +221,11 @@ class UserComptoirController extends FluxController
$cotisationAmount = $destinataire->getCotisationAmount(); $cotisationAmount = $destinataire->getCotisationAmount();
// Verifications // Verifications
if (is_null($cotisationAmount) || is_null($destinataire->getHouseholdAdultCount())) { if (
is_null($cotisationAmount)
|| is_null($destinataire->getHouseholdAdultCount()) && !$this->getParameter('simplified_household_based_allowance')
|| is_null($destinataire->getHouseholdCount()) && $this->getParameter('simplified_household_based_allowance')
) {
$this->addFlash( $this->addFlash(
'error', 'error',
$this->translator->trans("Opération impossible : le profil de l'habitant.e est incomplet, veuillez le compléter dans l'interface d'administration.") $this->translator->trans("Opération impossible : le profil de l'habitant.e est incomplet, veuillez le compléter dans l'interface d'administration.")
...@@ -231,7 +235,12 @@ class UserComptoirController extends FluxController ...@@ -231,7 +235,12 @@ class UserComptoirController extends FluxController
} }
if (is_null($destinataire->getAllocationAmount())) { if (is_null($destinataire->getAllocationAmount())) {
$this->tavCotisationUtils->calculateAllowanceAccordingToHousehold($destinataire); if ($this->getParameter('simplified_household_based_allowance') == true) {
$this->tavCotisationUtils->calculateAllowanceAccordingToHouseholdSimplified($destinataire);
} else {
$this->tavCotisationUtils->calculateAllowanceAccordingToHousehold($destinataire);
}
$this->em->persist($destinataire); $this->em->persist($destinataire);
} }
......
...@@ -125,11 +125,18 @@ class Adherent extends AccountableObject implements AccountableInterface ...@@ -125,11 +125,18 @@ class Adherent extends AccountableObject implements AccountableInterface
private $householdComposition; private $householdComposition;
/** /**
* @ORM\Column(type="integer", length=255, nullable=true) * @ORM\Column(type="integer", nullable=true)
*/ */
private $householdAdultCount; private $householdAdultCount;
/** /**
* In simplified household based allocation process, don't keep track of adults & children in the household
*
* @ORM\Column(type="integer", nullable=true)
*/
private $householdCount;
/**
* On household based allowance process, define a cotisation amount for each adherent. * On household based allowance process, define a cotisation amount for each adherent.
* *
* @ORM\Column(type="float", nullable=true) * @ORM\Column(type="float", nullable=true)
...@@ -137,7 +144,7 @@ class Adherent extends AccountableObject implements AccountableInterface ...@@ -137,7 +144,7 @@ class Adherent extends AccountableObject implements AccountableInterface
private $cotisationAmount; private $cotisationAmount;
/** /**
* On household based allowance process, the allowance amountis calculated based on household data. * On household based allowance process, the allowance amount is calculated based on household data.
* Calculate and save the allocation amount when the household data is updated. * Calculate and save the allocation amount when the household data is updated.
* *
* @ORM\Column(type="float", nullable=true) * @ORM\Column(type="float", nullable=true)
...@@ -384,6 +391,18 @@ class Adherent extends AccountableObject implements AccountableInterface ...@@ -384,6 +391,18 @@ class Adherent extends AccountableObject implements AccountableInterface
return $this; return $this;
} }
public function getHouseholdCount(): ?int
{
return $this->householdCount;
}
public function setHouseholdCount(?int $householdCount): self
{
$this->householdCount = $householdCount;
return $this;
}
public function getMailRappelCotisation(): ?bool public function getMailRappelCotisation(): ?bool
{ {
return $this->mailRappelCotisation; return $this->mailRappelCotisation;
......
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20250107110839 extends AbstractMigration
{
public function getDescription() : string
{
return '';
}
public function up(Schema $schema) : void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE adherent ADD household_count INT DEFAULT NULL');
}
public function down(Schema $schema) : void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE adherent DROP household_count');
}
}
...@@ -211,6 +211,35 @@ class TAVCotisationUtils ...@@ -211,6 +211,35 @@ class TAVCotisationUtils
} }
/** /**
* Third method to calculate allowance. Based on household as well, but in a simplified manner.
*
* Rules as follow:
* 1 person: 100 emlc
* 2 person: 150 emlc
* 3 person: 180 emlc
* 4+ person: 220 emlc
*/
public function calculateAllowanceAccordingToHouseholdSimplified(&$adherent) {
$householdCount = $adherent->getHouseholdCount();
if (is_null($householdCount) || $householdCount == 0) {
return;
}
if ($householdCount == 1) {
$mlcAllowanceAmount = 100;
} else if ($householdCount == 2) {
$mlcAllowanceAmount = 150;
} else if ($householdCount == 3) {
$mlcAllowanceAmount = 180;
} else {
$mlcAllowanceAmount = 220;
}
$adherent->setAllocationAmount($mlcAllowanceAmount);
}
/**
* Method called to create Flux based on allowance amount (for household based allowance). * Method called to create Flux based on allowance amount (for household based allowance).
* Only create flux if amount paid != allowance amount. * Only create flux if amount paid != allowance amount.
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment