From 547ecfb7abe274711f109cc6d343fadbc35af631 Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Mon, 6 Feb 2023 10:24:47 +0100 Subject: [PATCH 1/7] ITS-417932 | added new status for backoffice assets. --- .../migrations/0018_auto_20230206_1020.py | 20 +++++++++++++++++++ src/ralph/back_office/models.py | 4 ++-- .../data_importer/tests/test_demo_data.py | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/ralph/back_office/migrations/0018_auto_20230206_1020.py diff --git a/src/ralph/back_office/migrations/0018_auto_20230206_1020.py b/src/ralph/back_office/migrations/0018_auto_20230206_1020.py new file mode 100644 index 0000000000..7505761477 --- /dev/null +++ b/src/ralph/back_office/migrations/0018_auto_20230206_1020.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import ralph.lib.transitions.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('back_office', '0017_auto_20230112_0949'), + ] + + operations = [ + migrations.AlterField( + model_name='backofficeasset', + name='status', + field=ralph.lib.transitions.fields.TransitionField(default=1, choices=[(1, 'new'), (2, 'in progress'), (3, 'waiting for release'), (4, 'in use'), (5, 'loan'), (6, 'damaged'), (7, 'liquidated'), (8, 'in service'), (9, 'installed'), (10, 'free'), (11, 'reserved'), (12, 'sale'), (13, 'loan in progress'), (14, 'return in progress'), (15, 'to find'), (16, 'sent'), (17, 'to buyout'), (18, 'in use team'), (19, 'in use test'), (20, 'in progress team'), (21, 'in progress test'), (22, 'quarantine')]), + ), + ] diff --git a/src/ralph/back_office/models.py b/src/ralph/back_office/models.py index fdb4a3d55d..b0da594a55 100644 --- a/src/ralph/back_office/models.py +++ b/src/ralph/back_office/models.py @@ -85,9 +85,9 @@ class BackOfficeAssetStatus(Choices): to_buyout = _("to buyout") in_use_team = _("in use team") in_use_test = _("in use test") - in_progress_team = _("in_progress team") + in_progress_team = _("in progress team") in_progress_test = _("in progress test") - + quarantine = _("quarantine") class OfficeInfrastructure( AdminAbsoluteUrlMixin, diff --git a/src/ralph/data_importer/tests/test_demo_data.py b/src/ralph/data_importer/tests/test_demo_data.py index b22dcbae86..581682a6a0 100644 --- a/src/ralph/data_importer/tests/test_demo_data.py +++ b/src/ralph/data_importer/tests/test_demo_data.py @@ -11,5 +11,5 @@ class DemoDataTestCase(TestCase): def test_demo_data_command(self): management.call_command('demodata') self.assertEqual(DataCenterAsset.objects.count(), 422) - self.assertEqual(BackOfficeAsset.objects.count(), 264) + self.assertEqual(BackOfficeAsset.objects.count(), 268) self.assertEqual(get_user_model().objects.count(), 33) From f81fbe60975a063af62ea45a0e225a37b76f4a93 Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Mon, 6 Feb 2023 10:26:36 +0100 Subject: [PATCH 2/7] ITS-417932 | added new status for backoffice assets. --- src/ralph/back_office/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ralph/back_office/models.py b/src/ralph/back_office/models.py index b0da594a55..d89324454a 100644 --- a/src/ralph/back_office/models.py +++ b/src/ralph/back_office/models.py @@ -89,6 +89,7 @@ class BackOfficeAssetStatus(Choices): in_progress_test = _("in progress test") quarantine = _("quarantine") + class OfficeInfrastructure( AdminAbsoluteUrlMixin, NamedMixin, From 3f98d9eef34fcfd89dd89de3fe2daa4ec8932f1c Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Thu, 2 Mar 2023 11:53:47 +0100 Subject: [PATCH 3/7] ITS-421350 | Changed condition of showing buyout link --- src/ralph/accounts/admin.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ralph/accounts/admin.py b/src/ralph/accounts/admin.py index 10e7a4b531..9012a9aee3 100644 --- a/src/ralph/accounts/admin.py +++ b/src/ralph/accounts/admin.py @@ -124,10 +124,7 @@ def user_licence(self, item): def buyout_ticket(self, item): if not item.model.category.show_buyout_date: return '' - if item.status in [ - BackOfficeAssetStatus.in_use_team.id, - BackOfficeAssetStatus.in_use_test.id - ]: + if item.status is not BackOfficeAssetStatus.used.id: return '' else: get_params = { From e3a993b2cdf47cfce00342f0a0c9a41fe2679018 Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Thu, 23 Mar 2023 13:52:08 +0100 Subject: [PATCH 4/7] ITS-423764 | Added Bulk Edit for sim_cards, added new actions to sim_cards transitions. --- src/ralph/sim_cards/admin.py | 12 ++++++++++- src/ralph/sim_cards/models.py | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/ralph/sim_cards/admin.py b/src/ralph/sim_cards/admin.py index 075811e05b..1ba0de5492 100644 --- a/src/ralph/sim_cards/admin.py +++ b/src/ralph/sim_cards/admin.py @@ -1,6 +1,7 @@ from django.utils.translation import ugettext_lazy as _ from ralph.admin import RalphAdmin, register +from ralph.admin.mixins import BulkEditChangeListMixin, RalphAdminMixin from ralph.admin.views.multiadd import MulitiAddAdminMixin from ralph.lib.transitions.admin import TransitionAdminMixin from ralph.sim_cards.forms import SIMCardForm @@ -8,13 +9,20 @@ @register(SIMCard) -class SIMCardAdmin(MulitiAddAdminMixin, TransitionAdminMixin, RalphAdmin): +class SIMCardAdmin( + MulitiAddAdminMixin, + TransitionAdminMixin, + RalphAdmin, + BulkEditChangeListMixin, + RalphAdminMixin +): # NOTE(Anna Gabler): list_display - list on top page # raw_id_fields - fancy autocomplete # list_select_related - join to database (DJANGO) # list_filter - list of filters on simcard list # fieldsets - configuration of editor layout form = SIMCardForm + actions = ['bulk_edit_action'] show_transition_history = True list_display = ['status', 'card_number', 'phone_number', 'pin1', 'puk1', 'user', 'owner', 'warehouse', 'carrier', @@ -28,6 +36,8 @@ class SIMCardAdmin(MulitiAddAdminMixin, TransitionAdminMixin, RalphAdmin): search_fields = ['card_number', 'phone_number', 'user__first_name', 'user__last_name', 'user__username'] + bulk_edit_list = ['status', 'warehouse'] + list_filter = [ 'status', 'features', 'phone_number', 'card_number', 'warehouse', 'user', 'owner', 'user__segment', 'user__company', 'user__department', diff --git a/src/ralph/sim_cards/models.py b/src/ralph/sim_cards/models.py index bd9b768190..e62e67d6cc 100644 --- a/src/ralph/sim_cards/models.py +++ b/src/ralph/sim_cards/models.py @@ -1,3 +1,5 @@ +import datetime + from functools import partial from dj.choices import Choices @@ -315,3 +317,40 @@ def unassign_user(cls, instances, **kwargs): def assign_task_url(cls, instances, **kwargs): for instance in instances: instance.task_url = kwargs['task_url'] + + @classmethod + @transition_action() + def quarantine_date(cls, instances, **kwargs): + for instance in instances: + instance.quarantine_until = datetime.date.today() + datetime.timedelta(days=30) # noqa + + @classmethod + @transition_action( + form_fields={ + 'pin1': { + 'field': forms.CharField(label=_('pin1')), + }, + 'puk1': { + 'field': forms.CharField(label=_('puk1')), + } + } + ) + def change_pin_and_puk(cls, instances, **kwargs): + for instance in instances: + instance.pin1 = kwargs['pin1'] + instance.puk1 = kwargs['puk1'] + + @classmethod + @transition_action( + form_fields={ + 'card number': { + 'field': forms.CharField(label=_('card number')), + } + } + ) + def card_number_to_notes(cls, instances, **kwargs): + for instance in instances: + instance.remarks = '{}\n{}'.format( + instance.remarks, instance.card_number + ) + instance.card_number = kwargs['card number'] From 3928708636d0a93e7f1904665ea93c73ba6e702a Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Fri, 24 Mar 2023 09:40:02 +0100 Subject: [PATCH 5/7] HAL-2320 | Added new Field to backoffice assets and two new action transitions. --- src/ralph/back_office/admin.py | 6 +++--- ...0018_backofficeasset_last_status_change.py | 19 +++++++++++++++++++ src/ralph/back_office/models.py | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py diff --git a/src/ralph/back_office/admin.py b/src/ralph/back_office/admin.py index 560063d09e..76adf17c0a 100644 --- a/src/ralph/back_office/admin.py +++ b/src/ralph/back_office/admin.py @@ -162,9 +162,9 @@ class BackOfficeAssetAdmin( (_('Basic info'), { 'fields': ( 'hostname', 'model', 'barcode', 'sn', 'imei', 'imei2', 'niw', - 'status', 'warehouse', 'location', 'region', 'loan_end_date', - 'remarks', 'tags', 'property_of', 'task_url', 'service_env', - 'office_infrastructure' + 'status', 'last_status_change', 'warehouse', 'location', + 'region', 'loan_end_date', 'remarks', 'tags', 'property_of', + 'task_url', 'service_env', 'office_infrastructure' ) }), (_('User Info'), { diff --git a/src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py b/src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py new file mode 100644 index 0000000000..1980446a06 --- /dev/null +++ b/src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('back_office', '0017_auto_20230112_0949'), + ] + + operations = [ + migrations.AddField( + model_name='backofficeasset', + name='last_status_change', + field=models.DateField(verbose_name='Last status change', blank=True, null=True, default=None), + ), + ] diff --git a/src/ralph/back_office/models.py b/src/ralph/back_office/models.py index fdb4a3d55d..e17e8cec93 100644 --- a/src/ralph/back_office/models.py +++ b/src/ralph/back_office/models.py @@ -205,6 +205,12 @@ class BackOfficeAsset(Regionalizable, Asset): office_infrastructure = models.ForeignKey( OfficeInfrastructure, null=True, blank=True ) + last_status_change = models.DateField( + null=True, + blank=True, + default=None, + verbose_name=_('Last status change') + ) class Meta: verbose_name = _('Back Office Asset') @@ -704,3 +710,16 @@ def assign_hostname_if_empty_or_country_not_match( if settings.BACK_OFFICE_ASSET_AUTO_ASSIGN_HOSTNAME: for instance in instances: instance._try_assign_hostname(commit=False, force=False) + + + @classmethod + @transition_action() + def last_status(cls, instances, **kwargs): + for instance in instances: + instance.last_status_change = datetime.date.today() + + @classmethod + @transition_action() + def hardware_replacement(cls, instances, **kwargs): + for instance in instances: + instance.loan_end_date = datetime.date.today() + datetime.timedelta(days=10) # noqa From e5dff3787222e969aa1f9f12985b38172d99b1ce Mon Sep 17 00:00:00 2001 From: "lukasz.karykowski" Date: Fri, 24 Mar 2023 09:40:36 +0100 Subject: [PATCH 6/7] HAL-2320 | Added new Field to backoffice assets and two new action transitions. --- src/ralph/back_office/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ralph/back_office/models.py b/src/ralph/back_office/models.py index e17e8cec93..7fc4e27ed6 100644 --- a/src/ralph/back_office/models.py +++ b/src/ralph/back_office/models.py @@ -711,7 +711,6 @@ def assign_hostname_if_empty_or_country_not_match( for instance in instances: instance._try_assign_hostname(commit=False, force=False) - @classmethod @transition_action() def last_status(cls, instances, **kwargs): From 0c4aec74216ba97cec3713c285e4a99f6f536861 Mon Sep 17 00:00:00 2001 From: Marcin Pyrka Date: Tue, 28 Mar 2023 14:45:27 +0200 Subject: [PATCH 7/7] HAL-2382 | Rename migrations --- ...tus_change.py => 0019_backofficeasset_last_status_change.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/ralph/back_office/migrations/{0018_backofficeasset_last_status_change.py => 0019_backofficeasset_last_status_change.py} (89%) diff --git a/src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py b/src/ralph/back_office/migrations/0019_backofficeasset_last_status_change.py similarity index 89% rename from src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py rename to src/ralph/back_office/migrations/0019_backofficeasset_last_status_change.py index 1980446a06..3892622619 100644 --- a/src/ralph/back_office/migrations/0018_backofficeasset_last_status_change.py +++ b/src/ralph/back_office/migrations/0019_backofficeasset_last_status_change.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('back_office', '0017_auto_20230112_0949'), + ('back_office', '0018_auto_20230206_1020'), ] operations = [