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')},
|
||||
),
|
||||
]
|
||||
|
|
@ -34,16 +34,16 @@ class Role(ProjectBaseMixin):
|
|||
REVIEWER_MANGER = 6
|
||||
RESTAURANT_REVIEWER = 7
|
||||
SALES_MAN = 8
|
||||
WINERY_REVIEWER = 9 # Establishments subtype "winery"
|
||||
WINERY_REVIEWER = 9 # Establishments subtype "winery"
|
||||
SELLER = 10
|
||||
|
||||
ROLE_CHOICES = (
|
||||
(STANDARD_USER, 'Standard user'),
|
||||
(COMMENTS_MODERATOR, 'Comments moderator'),
|
||||
(COUNTRY_ADMIN, 'Country admin'),
|
||||
(CONTENT_PAGE_MANAGER, 'Content page manager'),
|
||||
(ESTABLISHMENT_MANAGER, 'Establishment manager'),
|
||||
(REVIEWER_MANGER, 'Reviewer manager'),
|
||||
(STANDARD_USER, _('Standard user')),
|
||||
(COMMENTS_MODERATOR, _('Comments moderator')),
|
||||
(COUNTRY_ADMIN, _('Country admin')),
|
||||
(CONTENT_PAGE_MANAGER, _('Content page manager')),
|
||||
(ESTABLISHMENT_MANAGER, _('Establishment manager')),
|
||||
(REVIEWER_MANGER, _('Reviewer manager')),
|
||||
(RESTAURANT_REVIEWER, 'Restaurant reviewer'),
|
||||
(SALES_MAN, 'Sales man'),
|
||||
(WINERY_REVIEWER, 'Winery reviewer'),
|
||||
|
|
@ -93,6 +93,14 @@ class UserQuerySet(models.QuerySet):
|
|||
return self.filter(oauth2_provider_refreshtoken__token=token,
|
||||
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):
|
||||
"""Base user model."""
|
||||
|
|
@ -116,7 +124,9 @@ class User(AbstractUser):
|
|||
USERNAME_FIELD = 'username'
|
||||
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)()
|
||||
|
||||
class Meta:
|
||||
|
|
@ -301,14 +311,33 @@ class User(AbstractUser):
|
|||
|
||||
class UserRole(ProjectBaseMixin):
|
||||
"""UserRole model."""
|
||||
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)
|
||||
VALIDATED = 'validated'
|
||||
PENDING = 'pending'
|
||||
CANCELLED = 'cancelled'
|
||||
REJECTED = 'rejected'
|
||||
|
||||
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)
|
||||
|
||||
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:
|
||||
unique_together = ['user', 'role']
|
||||
unique_together = ['user', 'role', 'establishment', 'state']
|
||||
|
||||
|
||||
class OldRole(models.Model):
|
||||
|
|
|
|||
|
|
@ -70,3 +70,7 @@ class UserRoleSerializer(serializers.ModelSerializer):
|
|||
'user',
|
||||
'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/', views.UserLstView.as_view(), name='user-create-list'),
|
||||
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
|
||||
permission_classes = (permissions.IsAdminUser,)
|
||||
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:
|
||||
managed = False
|
||||
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