Skip to content

Commit

Permalink
feature/RR-1355-wins-admin-screen (#5332)
Browse files Browse the repository at this point in the history
* add admin page for the export wins admins

* flake8

* more flake8

* added tests for model

* added str override to win adviser model

* Switch adviser field to use an autocomplete component
  • Loading branch information
chopkinsmade committed Apr 8, 2024
1 parent 6bfd7c6 commit b261ba9
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 21 deletions.
30 changes: 30 additions & 0 deletions datahub/export_win/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,3 +343,33 @@ def has_view_permission(self, request, obj=None):

def has_change_permission(self, request, obj=None):
return False


@admin.register(WinAdviser)
class WinAdviserAdmin(BaseModelAdminMixin):
"""Admin for Win Adviser."""

list_display = ('win', 'adviser', 'team_type', 'hq_team', 'location')
search_fields = ('win__id',)

fieldsets = (
('Overview', {'fields': (
'id',
'win',
'adviser',
'team_type',
'hq_team',
'location',
)}),
('Legacy Fields', {'fields': (
'name',
'legacy_id',
)}),
)

autocomplete_fields = (
'adviser',
)

def has_change_permission(self, request, obj=None):
return False
10 changes: 10 additions & 0 deletions datahub/export_win/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,10 @@ class Win(BaseModel):

objects = BaseExportWinSoftDeleteManager()

def __str__(self):
return (f'Export win {self.pk}: {self.adviser} <{self.adviser.email}> - '
f'{self.created_on.strftime("%Y-%m-%d %H:%M:%S") if self.created_on else ""}')

def save(self, *args, **kwargs):
calc_total = _calculate_totals_for_export_win(self)
self.total_expected_export_value = calc_total['total_export_value']
Expand Down Expand Up @@ -464,6 +468,12 @@ class WinAdviser(BaseModel, BaseLegacyModel):
# Legacy fields
name = models.CharField(max_length=128)

class Meta:
verbose_name = 'Adviser'

def __str__(self):
return f'Name: {self.adviser}, Team {self.team_type} - {self.hq_team}'


@reversion.register_base_model()
class CustomerResponse(BaseModel):
Expand Down
1 change: 1 addition & 0 deletions datahub/export_win/test/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class Meta:
class WinFactory(factory.django.DjangoModelFactory):
"""Win factory."""

created_on = factory.LazyFunction(now)
created_by = factory.SubFactory(AdviserFactory)
modified_by = factory.SelfAttribute('created_by')
date = factory.Faker('date_object')
Expand Down
62 changes: 41 additions & 21 deletions datahub/export_win/test/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,31 +87,51 @@ class TestWinAdviserModel(BaseLegacyModelTests):
factory = WinAdviserFactory
model_class = WinAdviser

def test_str_representation(self):
win_adviser = self.factory()

assert (
str(win_adviser)
== f'Name: {win_adviser.adviser}, Team {win_adviser.team_type} - {win_adviser.hq_team}'
)


class TestBreakdownModel(BaseLegacyModelTests):

factory = BreakdownFactory
model_class = Breakdown


def test_win_save(win_factory):
win = win_factory
calc_total = _calculate_totals_for_export_win(win)
win.save()
assert win.total_expected_export_value == calc_total['total_export_value']
assert win.total_expected_non_export_value == calc_total['total_non_export_value']
assert win.total_expected_odi_value == calc_total['total_odi_value']


def test_update_total_values(adviser_factory, win_factory, breakdown_factory):
win = win_factory
breakdown = breakdown_factory
calc_total = _calculate_totals_for_export_win(win)
expected_export_value = calc_total['total_export_value']
expected_non_export_value = calc_total['total_non_export_value']
expected_odi_value = calc_total['total_odi_value']
update_total_values(sender=adviser_factory, instance=breakdown)
win.refresh_from_db()
assert win.total_expected_export_value == expected_export_value
assert win.total_expected_non_export_value == expected_non_export_value
assert win.total_expected_odi_value == expected_odi_value
class TestWinModel():

def test_win_save(self, win_factory):
win = win_factory
calc_total = _calculate_totals_for_export_win(win)
win.save()
assert win.total_expected_export_value == calc_total['total_export_value']
assert win.total_expected_non_export_value == calc_total['total_non_export_value']
assert win.total_expected_odi_value == calc_total['total_odi_value']

def test_update_total_values(self, adviser_factory, win_factory, breakdown_factory):
win = win_factory
breakdown = breakdown_factory
calc_total = _calculate_totals_for_export_win(win)
expected_export_value = calc_total['total_export_value']
expected_non_export_value = calc_total['total_non_export_value']
expected_odi_value = calc_total['total_odi_value']
update_total_values(sender=adviser_factory, instance=breakdown)
win.refresh_from_db()
assert win.total_expected_export_value == expected_export_value
assert win.total_expected_non_export_value == expected_non_export_value
assert win.total_expected_odi_value == expected_odi_value

def test_str_representation_with_created_on(self, win_factory):
win = win_factory
assert str(win) == (f'Export win {win.pk}: {win.adviser} <{win.adviser.email}> - '
f'{win.created_on.strftime("%Y-%m-%d %H:%M:%S")}')

def test_str_representation_without_created_on(self):
win = WinFactory(created_on=None)
win.created_on = None

assert str(win) == f'Export win {win.pk}: {win.adviser} <{win.adviser.email}> - '

0 comments on commit b261ba9

Please sign in to comment.