add datamigrate and change for models
This commit is contained in:
parent
d2f011417a
commit
86b2e708f0
|
|
@ -0,0 +1,49 @@
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from account.models import User, UserRole, Role
|
||||||
|
from transfer.models import OwnershipAffs
|
||||||
|
from establishment.models import Establishment
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = """Add ownership to UserRoles."""
|
||||||
|
|
||||||
|
def handle(self, *args, **kwarg):
|
||||||
|
create_user_roles = []
|
||||||
|
# filter owner records with state not null only
|
||||||
|
owners = OwnershipAffs.objects.filter(state__isnull=False)
|
||||||
|
|
||||||
|
# Get role, may be more then 1
|
||||||
|
role = Role.objects.filter(role=Role.ESTABLISHMENT_MANAGER).first()
|
||||||
|
if not role:
|
||||||
|
role = Role.objects.create(
|
||||||
|
role=Role.ESTABLISHMENT_MANAGER
|
||||||
|
)
|
||||||
|
|
||||||
|
for owner in tqdm(owners):
|
||||||
|
user = User.objects.filter(
|
||||||
|
old_id=owner.account_id).first()
|
||||||
|
requester = User.objects.filter(
|
||||||
|
old_id=owner.requester_id).first()
|
||||||
|
establishment = Establishment.objects.filter(
|
||||||
|
old_id=owner.establishment_id).first()
|
||||||
|
|
||||||
|
if user and establishment:
|
||||||
|
user_role = UserRole.objects.filter(
|
||||||
|
user=user, role=role, establishment=establishment, state=owner.state).first()
|
||||||
|
if not user_role:
|
||||||
|
# add to bulk_create
|
||||||
|
create_user_roles.append(UserRole(
|
||||||
|
user=user,
|
||||||
|
role=role,
|
||||||
|
establishment=establishment,
|
||||||
|
state=owner.state,
|
||||||
|
requester=requester
|
||||||
|
))
|
||||||
|
|
||||||
|
UserRole.objects.bulk_create(create_user_roles)
|
||||||
|
self.stdout.write(
|
||||||
|
self.style.WARNING(
|
||||||
|
f'Created roles: {len(create_user_roles)}')
|
||||||
|
)
|
||||||
25
apps/account/migrations/0026_auto_20191211_1134.py
Normal file
25
apps/account/migrations/0026_auto_20191211_1134.py
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-11 11:34
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('account', '0025_auto_20191210_0623'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userrole',
|
||||||
|
name='requester',
|
||||||
|
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='roles_requested', to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userrole',
|
||||||
|
name='state',
|
||||||
|
field=models.CharField(choices=[('validated', 'validated'), ('pending', 'pending'), ('cancelled', 'cancelled'), ('rejected', 'rejected')], default='pending', max_length=10, verbose_name='state'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/account/migrations/0027_auto_20191211_1444.py
Normal file
18
apps/account/migrations/0027_auto_20191211_1444.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-11 14:44
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('establishment', '0067_auto_20191122_1244'),
|
||||||
|
('account', '0026_auto_20191211_1134'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='userrole',
|
||||||
|
unique_together={('user', 'role', 'establishment', 'state')},
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -38,12 +38,12 @@ class Role(ProjectBaseMixin):
|
||||||
SELLER = 10
|
SELLER = 10
|
||||||
|
|
||||||
ROLE_CHOICES = (
|
ROLE_CHOICES = (
|
||||||
(STANDARD_USER, 'Standard user'),
|
(STANDARD_USER, _('Standard user')),
|
||||||
(COMMENTS_MODERATOR, 'Comments moderator'),
|
(COMMENTS_MODERATOR, _('Comments moderator')),
|
||||||
(COUNTRY_ADMIN, 'Country admin'),
|
(COUNTRY_ADMIN, _('Country admin')),
|
||||||
(CONTENT_PAGE_MANAGER, 'Content page manager'),
|
(CONTENT_PAGE_MANAGER, _('Content page manager')),
|
||||||
(ESTABLISHMENT_MANAGER, 'Establishment manager'),
|
(ESTABLISHMENT_MANAGER, _('Establishment manager')),
|
||||||
(REVIEWER_MANGER, 'Reviewer manager'),
|
(REVIEWER_MANGER, _('Reviewer manager')),
|
||||||
(RESTAURANT_REVIEWER, 'Restaurant reviewer'),
|
(RESTAURANT_REVIEWER, 'Restaurant reviewer'),
|
||||||
(SALES_MAN, 'Sales man'),
|
(SALES_MAN, 'Sales man'),
|
||||||
(WINERY_REVIEWER, 'Winery reviewer'),
|
(WINERY_REVIEWER, 'Winery reviewer'),
|
||||||
|
|
@ -93,6 +93,14 @@ class UserQuerySet(models.QuerySet):
|
||||||
return self.filter(oauth2_provider_refreshtoken__token=token,
|
return self.filter(oauth2_provider_refreshtoken__token=token,
|
||||||
oauth2_provider_refreshtoken__expires__gt=timezone.now())
|
oauth2_provider_refreshtoken__expires__gt=timezone.now())
|
||||||
|
|
||||||
|
def by_role(self, role):
|
||||||
|
"""Filter by role."""
|
||||||
|
return self.filter(userrole__role=role).dictinct()
|
||||||
|
|
||||||
|
def by_roles(self, roles: list):
|
||||||
|
"""Filter by roles."""
|
||||||
|
return self.filter(userrole__role__in=roles).dictinct()
|
||||||
|
|
||||||
|
|
||||||
class User(AbstractUser):
|
class User(AbstractUser):
|
||||||
"""Base user model."""
|
"""Base user model."""
|
||||||
|
|
@ -116,7 +124,9 @@ class User(AbstractUser):
|
||||||
USERNAME_FIELD = 'username'
|
USERNAME_FIELD = 'username'
|
||||||
REQUIRED_FIELDS = ['email']
|
REQUIRED_FIELDS = ['email']
|
||||||
|
|
||||||
roles = models.ManyToManyField(Role, verbose_name=_('Roles'), through='UserRole')
|
roles = models.ManyToManyField(
|
||||||
|
Role, verbose_name=_('Roles'), symmetrical=False,
|
||||||
|
through_fields=('user', 'role'), through='UserRole')
|
||||||
objects = UserManager.from_queryset(UserQuerySet)()
|
objects = UserManager.from_queryset(UserQuerySet)()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -301,14 +311,33 @@ class User(AbstractUser):
|
||||||
|
|
||||||
class UserRole(ProjectBaseMixin):
|
class UserRole(ProjectBaseMixin):
|
||||||
"""UserRole model."""
|
"""UserRole model."""
|
||||||
user = models.ForeignKey('account.User',
|
VALIDATED = 'validated'
|
||||||
verbose_name=_('User'),
|
PENDING = 'pending'
|
||||||
on_delete=models.CASCADE)
|
CANCELLED = 'cancelled'
|
||||||
role = models.ForeignKey(Role, verbose_name=_('Role'), on_delete=models.SET_NULL, null=True)
|
REJECTED = 'rejected'
|
||||||
establishment = models.ForeignKey(Establishment, verbose_name=_('Establishment'),
|
|
||||||
|
STATE_CHOICES = (
|
||||||
|
(VALIDATED, _('validated')),
|
||||||
|
(PENDING, _('pending')),
|
||||||
|
(CANCELLED, _('cancelled')),
|
||||||
|
(REJECTED, _('rejected'))
|
||||||
|
)
|
||||||
|
user = models.ForeignKey(
|
||||||
|
'account.User', verbose_name=_('User'), on_delete=models.CASCADE)
|
||||||
|
role = models.ForeignKey(
|
||||||
|
Role, verbose_name=_('Role'), on_delete=models.SET_NULL, null=True)
|
||||||
|
establishment = models.ForeignKey(
|
||||||
|
Establishment, verbose_name=_('Establishment'),
|
||||||
on_delete=models.SET_NULL, null=True, blank=True)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
||||||
|
state = models.CharField(
|
||||||
|
_('state'), choices=STATE_CHOICES, max_length=10, default=PENDING)
|
||||||
|
requester = models.ForeignKey(
|
||||||
|
'account.User', blank=True, null=True, default=None, related_name='roles_requested',
|
||||||
|
on_delete=models.SET_NULL)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['user', 'role']
|
unique_together = ['user', 'role', 'establishment', 'state']
|
||||||
|
|
||||||
|
|
||||||
class OldRole(models.Model):
|
class OldRole(models.Model):
|
||||||
|
|
|
||||||
|
|
@ -70,3 +70,7 @@ class UserRoleSerializer(serializers.ModelSerializer):
|
||||||
'user',
|
'user',
|
||||||
'establishment'
|
'establishment'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class OwnerSerializer(BackUserSerializer):
|
||||||
|
"""Owner serializer."""
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,5 @@ urlpatterns = [
|
||||||
path('user-role/', views.UserRoleLstView.as_view(), name='user-role-list-create'),
|
path('user-role/', views.UserRoleLstView.as_view(), name='user-role-list-create'),
|
||||||
path('user/', views.UserLstView.as_view(), name='user-create-list'),
|
path('user/', views.UserLstView.as_view(), name='user-create-list'),
|
||||||
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
||||||
|
path('owner/', views.OwnerListView.as_view(), name='owner-list'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -46,3 +46,9 @@ class UserRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
serializer_class = serializers.BackDetailUserSerializer
|
serializer_class = serializers.BackDetailUserSerializer
|
||||||
permission_classes = (permissions.IsAdminUser,)
|
permission_classes = (permissions.IsAdminUser,)
|
||||||
lookup_field = 'id'
|
lookup_field = 'id'
|
||||||
|
|
||||||
|
|
||||||
|
class OwnerListView(generics.ListAPIView):
|
||||||
|
serializer_class = serializers.OwnerSerializer
|
||||||
|
queryset = models.User.objects.active()
|
||||||
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly, )
|
||||||
|
|
|
||||||
|
|
@ -1222,3 +1222,19 @@ class Footers(MigrateMixin):
|
||||||
class Meta:
|
class Meta:
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'footers'
|
db_table = 'footers'
|
||||||
|
|
||||||
|
|
||||||
|
class OwnershipAffs(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
role = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
state = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
account_id = models.IntegerField(blank=True, null=True)
|
||||||
|
establishment_id = models.IntegerField(blank=True, null=True)
|
||||||
|
created_at = models.DateTimeField()
|
||||||
|
updated_at = models.DateTimeField()
|
||||||
|
requester_id = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'ownership_affs'
|
||||||
Loading…
Reference in New Issue
Block a user