Skip to content

Commit

Permalink
feat: implement application alteration submission flow
Browse files Browse the repository at this point in the history
  • Loading branch information
EmiliaMakelaVincit committed Mar 21, 2024
1 parent aaf7794 commit ebbe9e5
Show file tree
Hide file tree
Showing 23 changed files with 1,361 additions and 87 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _
Expand Down Expand Up @@ -46,7 +45,7 @@ def _validate_conditional_required_fields(self, is_suspended, data):
_("Resume date is required if the benefit period wasn't terminated")
)
)
if data["use_alternate_einvoice_provider"] is True:
if data["use_einvoice"] is True:
for field, field_label in [
("einvoice_provider_name", _("E-invoice provider name")),
("einvoice_provider_identifier", _("E-invoice provider identifier")),
Expand All @@ -57,7 +56,7 @@ def _validate_conditional_required_fields(self, is_suspended, data):
ValidationError(
format_lazy(
_(
"{field} must be filled if using an alternative e-invoice address"
"{field} must be filled if using an e-invoice address"
),
field=field_label,
)
Expand Down Expand Up @@ -124,11 +123,7 @@ def validate(self, data):

application = merged_data["application"]

if settings.NEXT_PUBLIC_MOCK_FLAG:
if not (user and user.is_authenticated):
user = get_user_model().objects.all().order_by("username").first()

if not user.is_handler():
if not settings.NEXT_PUBLIC_MOCK_FLAG and not user.is_handler():
company = get_company_from_request(request)
if company != application.company:
raise PermissionDenied(_("You are not allowed to do this action"))
Expand Down
32 changes: 32 additions & 0 deletions backend/benefit/applications/migrations/0061_auto_20240312_1150.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by Django 3.2.23 on 2024-03-14 16:07

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
('applications', '0060_applicationalteration_state'),
]

operations = [
migrations.RenameField(
model_name='applicationalteration',
old_name='use_alternate_einvoice_provider',
new_name='use_einvoice',
),
migrations.AlterField(
model_name='applicationalteration',
name='reason',
field=models.TextField(blank=True, verbose_name='reason for alteration'),
),
migrations.AlterField(
model_name='applicationalteration',
name='use_einvoice',
field=models.BooleanField(default=False, verbose_name='whether to use handle billing with an e-invoice instead of a bill sent to a physical address'),
),
migrations.AddField(
model_name='applicationalteration',
name='contact_person_name',
field=models.TextField(verbose_name='contact person'),
),
]
13 changes: 10 additions & 3 deletions backend/benefit/applications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1073,7 +1073,10 @@ class ApplicationAlteration(TimeStampedModel):
blank=True,
)

reason = models.TextField(verbose_name=_("reason for alteration"))
reason = models.TextField(
verbose_name=_("reason for alteration"),
blank=True,
)

handled_at = models.DateField(
verbose_name=_("date when alteration notice was handled"),
Expand All @@ -1100,9 +1103,9 @@ class ApplicationAlteration(TimeStampedModel):
null=True,
)

use_alternate_einvoice_provider = models.BooleanField(
use_einvoice = models.BooleanField(
verbose_name=_(
"whether to use a separate e-invoice address from the one of the applicant organization"
"whether to use handle billing with an e-invoice instead of a bill sent to a physical address"
),
default=False,
)
Expand All @@ -1121,3 +1124,7 @@ class ApplicationAlteration(TimeStampedModel):
verbose_name=_("e-invoice address"),
blank=True,
)

contact_person_name = models.TextField(
verbose_name=_("contact person"),
)
103 changes: 83 additions & 20 deletions backend/benefit/applications/tests/test_applications_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2488,7 +2488,8 @@ def test_application_alteration_create_terminated(api_client, application):
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_einvoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201
Expand All @@ -2505,7 +2506,8 @@ def test_application_alteration_create_suspended(api_client, application):
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=7),
"resume_date": application.start_date + relativedelta(days=14),
"use_alternate_einvoice_provider": False,
"use_einvoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201
Expand All @@ -2521,7 +2523,8 @@ def test_application_alteration_create_missing_resume_date(api_client, applicati
"alteration_type": "suspension",
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_einvoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2539,14 +2542,56 @@ def test_application_alteration_create_missing_einvoice_fields(api_client, appli
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": True,
"use_einvoice": True,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
assert "non_field_errors" in response.data
assert len(response.data["non_field_errors"]) == 3


def test_application_alteration_create_missing_contact_person_name(
api_client, application
):
pk = application.id

response = api_client.post(
reverse("v1:application-alteration-list"),
{
"application": pk,
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_einvoice": False,
"contact_person_name": "",
},
)
assert response.status_code == 400
assert "contact_person_name" in response.data
assert len(response.data.keys()) == 1


def test_application_alteration_create_use_einvoice(api_client, application):
pk = application.id

response = api_client.post(
reverse("v1:application-alteration-list"),
{
"application": pk,
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_einvoice": True,
"einvoice_provider_name": "Basware Oyj",
"einvoice_provider_identifier": "BAWCFI22",
"einvoice_address": "001100223300",
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201


def test_application_alteration_create_outside_application_date_range(
api_client, application
):
Expand All @@ -2559,7 +2604,8 @@ def test_application_alteration_create_outside_application_date_range(
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=-7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2572,7 +2618,8 @@ def test_application_alteration_create_outside_application_date_range(
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.end_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2586,7 +2633,8 @@ def test_application_alteration_create_outside_application_date_range(
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"resume_date": application.end_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2606,7 +2654,8 @@ def test_application_alteration_create_reversed_suspension_dates(
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=14),
"resume_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2625,7 +2674,8 @@ def test_application_alteration_create_overlapping_alteration(api_client, applic
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=7),
"resume_date": application.start_date + relativedelta(days=14),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201
Expand All @@ -2645,7 +2695,8 @@ def test_application_alteration_create_overlapping_alteration(api_client, applic
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=9),
"resume_date": application.start_date + relativedelta(days=16),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2660,7 +2711,8 @@ def test_application_alteration_create_overlapping_alteration(api_client, applic
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=5),
"resume_date": application.start_date + relativedelta(days=12),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2675,7 +2727,8 @@ def test_application_alteration_create_overlapping_alteration(api_client, applic
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=5),
"resume_date": application.start_date + relativedelta(days=16),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 400
Expand All @@ -2696,7 +2749,8 @@ def test_application_alteration_create_non_overlapping_alteration(
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=7),
"resume_date": application.start_date + relativedelta(days=14),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201
Expand All @@ -2716,7 +2770,8 @@ def test_application_alteration_create_non_overlapping_alteration(
"reason": "Keskeytynyt",
"end_date": application.start_date + relativedelta(days=16),
"resume_date": application.start_date + relativedelta(days=23),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 201
Expand All @@ -2734,7 +2789,8 @@ def test_application_alteration_create_forbidden_anonymous(
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 403
Expand All @@ -2756,7 +2812,8 @@ def test_application_alteration_create_forbidden_another_company(
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)
assert response.status_code == 403
Expand All @@ -2774,11 +2831,12 @@ def test_application_alteration_create_ignored_fields_applicant(
"state": "handled",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"handled_at": application.start_date + relativedelta(days=10),
"recovery_start_date": application.start_date + relativedelta(days=7),
"recovery_end_date": application.end_date,
"recovery_amount": 4000,
"contact_person_name": "Ella Esimerkki",
},
)

Expand All @@ -2803,11 +2861,12 @@ def test_application_alteration_create_ignored_fields_handler(
"state": "handled",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"handled_at": application.start_date + relativedelta(days=10),
"recovery_start_date": application.start_date + relativedelta(days=7),
"recovery_end_date": application.end_date,
"recovery_amount": 4000,
"contact_person_name": "Ella Esimerkki",
},
)

Expand Down Expand Up @@ -2836,7 +2895,8 @@ def test_application_alteration_patch_applicant(
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)

Expand Down Expand Up @@ -2864,7 +2924,8 @@ def test_application_alteration_patch_handler(handler_api_client, application):
"alteration_type": "termination",
"reason": "Päättynyt",
"end_date": application.start_date + relativedelta(days=7),
"use_alternate_einvoice_provider": False,
"use_invoice": False,
"contact_person_name": "Ella Esimerkki",
},
)

Expand Down Expand Up @@ -2958,6 +3019,8 @@ def _create_application_alteration(application):
alteration.alteration_type = ApplicationAlterationType.TERMINATION
alteration.end_date = application.start_date + relativedelta(days=7)
alteration.reason = f.sentence()
alteration.contact_person_name = "Ella Esimerkki"
alteration.use_einvoice = False
alteration.save()

return alteration
Loading

0 comments on commit ebbe9e5

Please sign in to comment.