| @ -0,0 +1,108 @@ | |||||
| """Values derived from a user's responses. | |||||
| This module provides functions to take a set of responses from a user and create | |||||
| a set of derived values that are consistent with the user's responses. This is | |||||
| done, in part, to centralize the logic for getting such derived values (such as | |||||
| whether or not to show a particular fact sheet). | |||||
| The general usage is to add to the context of a template by calling | |||||
| ``get_derived_data`` on the user responses and including the resulting dict | |||||
| under the _derived_ key. | |||||
| """ | |||||
| import json | |||||
| DERIVED = [ | |||||
| 'show_fact_sheet_a', | |||||
| 'show_fact_sheet_b', | |||||
| 'show_fact_sheet_c', | |||||
| 'show_fact_sheet_d', | |||||
| 'show_fact_sheet_e', | |||||
| 'show_fact_sheet_f', | |||||
| ] | |||||
| def get_derived_data(responses): | |||||
| """ Return a dict of data derived from the user's responses """ | |||||
| functions = globals() | |||||
| return {func: functions[func](responses) for func in DERIVED} | |||||
| def show_fact_sheet_a(responses): | |||||
| """ | |||||
| If the claimant is claiming special extraordinary expenses, Fact Sheet A is | |||||
| indicated. | |||||
| """ | |||||
| expenses = json.loads(responses.get('special_extraordinary_expenses', '[]')) | |||||
| return len(expenses) > 0 and "None" not in expenses | |||||
| def show_fact_sheet_b(responses): | |||||
| """ | |||||
| If any child lives with both parents, custody is shared, so Fact Sheet B | |||||
| is indicated. | |||||
| """ | |||||
| children = json.loads(responses.get('claimant_children', '[]')) | |||||
| print(children) | |||||
| return any([child['child_live_with'] == 'Lives with both' | |||||
| for child in children]) | |||||
| def show_fact_sheet_c(responses): | |||||
| """ | |||||
| If any child lives with one parent and there's another child who lives with | |||||
| the other parent or is shared, Fact Sheet C is indicated. | |||||
| """ | |||||
| with_you = 0 | |||||
| with_spouse = 0 | |||||
| with_both = 0 | |||||
| children = json.loads(responses.get('claimant_children', '[]')) | |||||
| for child in children: | |||||
| if child['child_live_with'] == 'Lives with you': | |||||
| with_you += 1 | |||||
| elif child['child_live_with'] == 'Lives with spouse': | |||||
| with_spouse += 1 | |||||
| elif child['child_live_with'] == 'Lives with both': | |||||
| with_both += 1 | |||||
| return (with_you > 0 and (with_spouse + with_both > 0) or | |||||
| with_spouse > 0 and (with_you + with_both > 0)) | |||||
| def show_fact_sheet_d(responses): | |||||
| """ | |||||
| If a claimaint is claiming financial support for a child of the marriage | |||||
| over 19, Fact Sheet D is indicated. | |||||
| """ | |||||
| support = json.loads(responses.get('children_financial_support', '[]')) | |||||
| return len(support) > 0 and "NO" not in support | |||||
| def show_fact_sheet_e(responses): | |||||
| """ | |||||
| If the claimant is claiming undue hardship, Fact Sheet E is indicated. | |||||
| """ | |||||
| return responses.get('claiming_undue_hardship', '') == 'YES' | |||||
| def show_fact_sheet_f(responses): | |||||
| """ | |||||
| If one of the claimants earns over $150,000, Fact Sheet F is indicated. | |||||
| """ | |||||
| try: | |||||
| annual = int(responses.get('annual_gross_income', 0)) | |||||
| except ValueError: | |||||
| annual = 0 | |||||
| try: | |||||
| spouses = int(responses.get('spouse_annual_gross_income', 0)) | |||||
| except ValueError: | |||||
| spouses = 0 | |||||
| return annual > 150000 or spouses > 150000 | |||||