From 275a2d8a9bc2262327f2ae619ab1c6eb48874a0c Mon Sep 17 00:00:00 2001
From: Denis Merigoux <denis.merigoux@gmail.com>
Date: Tue, 2 Jul 2019 13:49:26 -0700
Subject: [PATCH] Added relative/absolute diff for new child

---
 main.py      | 14 +++++++++++---
 questions.py | 18 ++++++++++++++----
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/main.py b/main.py
index 7ed0d0a..36a3298 100644
--- a/main.py
+++ b/main.py
@@ -59,10 +59,18 @@ search_marginal_tax = MaxMarginalTaxRateSearch(
     avoid_seuil_non_distribution_bourses_college=False,
 )
 
-search_new_child = MaxGainFromNewChild(
+search_new_child_relative = MaxGainFromNewChild(
     menage_constraints,
-    nb_personnes_a_charge_init=1,
-    age_nouvel_enfant=0
+    relative=True,
+    nb_personnes_a_charge_init=0,
+    age_nouvel_enfant=None
+)
+
+search_new_child_absolute = MaxGainFromNewChild(
+    menage_constraints,
+    relative=False,
+    nb_personnes_a_charge_init=0,
+    age_nouvel_enfant=None
 )
 
 search_different_distribution_revenus = MaxGainFromDifferentRevenueDistribution(
diff --git a/questions.py b/questions.py
index ab6fb12..7abdeb8 100644
--- a/questions.py
+++ b/questions.py
@@ -436,10 +436,12 @@ class MaxGainFromNewChild(DichotomicSearch):
 
     def __init__(self,
         menage_constraints: MenageConstraints,
+        relative: bool,
         nb_personnes_a_charge_init: Optional[int]=None,
-        age_nouvel_enfant: Optional[int]=None
+        age_nouvel_enfant: Optional[int]=None,
     ):
         self.menage_constraints_ = menage_constraints
+        self.relative = relative
         self.nb_personnes_a_charge_init = nb_personnes_a_charge_init
         self.age_nouvel_enfant = age_nouvel_enfant
 
@@ -520,7 +522,10 @@ class MaxGainFromNewChild(DichotomicSearch):
         if self.s1 is None:
             raise TypeError("Error !")
         if current_search_param_value >= 0:
-            deltai_min = self.s1 % Taux.pourcent(current_search_param_value)
+            if self.relative:
+                deltai_min = self.s1 % Taux.pourcent(current_search_param_value)
+            else:
+                deltai_min = Montant.euros(current_search_param_value, s)
         else:
             raise TypeError("Le gain doit être positif !")
         return self.deltai >= deltai_min
@@ -541,7 +546,11 @@ class MaxGainFromNewChild(DichotomicSearch):
             relative_gain_found: float = float("inf")
         else:
             relative_gain_found = ratio * 100
-        return relative_gain_found
+        absolute_gain_found: float = deltai_m_print.to_float()  # type:ignore
+        if self.relative:
+            return relative_gain_found
+        else:
+            return absolute_gain_found
 
     def result_found_lines(self, s: Solver, new_search_param_value: float) -> List[Tuple[str, Any]]:
         if self.deltai is None:
@@ -549,7 +558,8 @@ class MaxGainFromNewChild(DichotomicSearch):
         deltai_m = self.deltai // 12
         return [
             ("Changement mensuel après redistribution", deltai_m),
-            ("Gain relatif avec nouvel enfant", "{0:.1f}%".format(new_search_param_value))
+            (("Gain relatif avec nouvel enfant", "{0:.1f}%".format(new_search_param_value)) if self.relative else
+            ("Gain absolu avec nouvel enfant", Montant.centimes(int(new_search_param_value * 100), s)))
         ]
 
     def before_request_message(self, current_search_param_value: int) -> str:
-- 
GitLab