Migrate complete
This commit is contained in:
parent
cc7754a9d7
commit
96e08a0900
|
|
@ -1,14 +1,15 @@
|
||||||
from account.models import OldRole, Role
|
from account.models import OldRole, Role, User, UserRole
|
||||||
from main.models import SiteSettings
|
from main.models import SiteSettings
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db import connections
|
from django.db import connections, transaction
|
||||||
|
from django.db.models import Prefetch
|
||||||
from establishment.management.commands.add_position import namedtuplefetchall
|
from establishment.management.commands.add_position import namedtuplefetchall
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = '''Add site affilations from old db to new db.
|
help = '''Add site affilations from old db to new db.
|
||||||
Run after migrate {}!!!'''
|
Run after migrate account models!!!'''
|
||||||
|
|
||||||
def map_role_sql(self):
|
def map_role_sql(self):
|
||||||
with connections['legacy'].cursor() as cursor:
|
with connections['legacy'].cursor() as cursor:
|
||||||
|
|
@ -78,8 +79,74 @@ class Command(BaseCommand):
|
||||||
Role.objects.bulk_create(objects)
|
Role.objects.bulk_create(objects)
|
||||||
self.stdout.write(self.style.WARNING(f'Added site roles.'))
|
self.stdout.write(self.style.WARNING(f'Added site roles.'))
|
||||||
|
|
||||||
|
def update_site_role(self):
|
||||||
|
roles = Role.objects.filter(country__isnull=True).select_related('site')\
|
||||||
|
.filter(site__id__isnull=False).select_for_update()
|
||||||
|
with transaction.atomic():
|
||||||
|
for role in tqdm(roles, desc='Update role country'):
|
||||||
|
role.country = role.site.country
|
||||||
|
role.save()
|
||||||
|
self.stdout.write(self.style.WARNING(f'Updated site roles.'))
|
||||||
|
|
||||||
|
def user_role_sql(self):
|
||||||
|
with connections['legacy'].cursor() as cursor:
|
||||||
|
cursor.execute('''
|
||||||
|
select t.*
|
||||||
|
from
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
site_id,
|
||||||
|
account_id,
|
||||||
|
COALESCE(role, 'GUEST') as role
|
||||||
|
FROM site_affiliations AS sa
|
||||||
|
) t
|
||||||
|
join accounts a on a.id = t.account_id
|
||||||
|
where t.role not in ('admin', 'GUEST')
|
||||||
|
''')
|
||||||
|
return namedtuplefetchall(cursor)
|
||||||
|
|
||||||
|
def add_role_user(self):
|
||||||
|
for s in tqdm(self.user_role_sql(), desc='Add role to user'):
|
||||||
|
sites = SiteSettings.objects.filter(old_id=s.site_id)
|
||||||
|
old_role = OldRole.objects.get(old_role=s.role)
|
||||||
|
role_choice = getattr(Role, old_role.new_role)
|
||||||
|
roles = Role.objects.filter(site__in=[site for site in sites], role=role_choice)
|
||||||
|
users = User.objects.filter(old_id=s.account_id)
|
||||||
|
for user in users:
|
||||||
|
for role in roles:
|
||||||
|
user_role = UserRole.objects.get_or_create(user=user,
|
||||||
|
role=role)
|
||||||
|
self.stdout.write(self.style.WARNING(f'Added users roles.'))
|
||||||
|
|
||||||
|
def superuser_role_sql(self):
|
||||||
|
with connections['legacy'].cursor() as cursor:
|
||||||
|
cursor.execute('''
|
||||||
|
select t.*
|
||||||
|
from
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
site_id,
|
||||||
|
account_id,
|
||||||
|
COALESCE(role, 'GUEST') as role
|
||||||
|
FROM site_affiliations AS sa
|
||||||
|
) t
|
||||||
|
join accounts a on a.id = t.account_id
|
||||||
|
where t.role in ('admin')
|
||||||
|
''')
|
||||||
|
return namedtuplefetchall(cursor)
|
||||||
|
|
||||||
|
def add_superuser(self):
|
||||||
|
for s in tqdm(self.superuser_role_sql(), desc='Add superuser'):
|
||||||
|
users = User.objects.filter(old_id=s.account_id).select_for_update()
|
||||||
|
with transaction.atomic():
|
||||||
|
for user in users:
|
||||||
|
user.is_superuser = True
|
||||||
|
user.save()
|
||||||
|
self.stdout.write(self.style.WARNING(f'Added superuser.'))
|
||||||
|
|
||||||
def handle(self, *args, **kwargs):
|
def handle(self, *args, **kwargs):
|
||||||
# self.add_old_roles()
|
self.add_old_roles()
|
||||||
self.add_site_role()
|
self.add_site_role()
|
||||||
|
self.update_site_role()
|
||||||
|
self.add_role_user()
|
||||||
|
self.add_superuser()
|
||||||
22
apps/account/migrations/0023_auto_20191204_0916.py
Normal file
22
apps/account/migrations/0023_auto_20191204_0916.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-04 09:16
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('account', '0022_auto_20191203_1149'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='role',
|
||||||
|
field=models.PositiveIntegerField(choices=[(1, 'Standard user'), (2, 'Comments moderator'), (3, 'Country admin'), (4, 'Content page manager'), (5, 'Establishment manager'), (6, 'Reviewer manager'), (7, 'Restaurant reviewer'), (8, 'Sales man'), (9, 'Winery reviewer'), (10, 'Seller')], verbose_name='Role'),
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='userrole',
|
||||||
|
unique_together={('user', 'role')},
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -297,6 +297,8 @@ class UserRole(ProjectBaseMixin):
|
||||||
role = models.ForeignKey(Role, verbose_name=_('Role'), on_delete=models.SET_NULL, null=True)
|
role = models.ForeignKey(Role, verbose_name=_('Role'), on_delete=models.SET_NULL, null=True)
|
||||||
establishment = models.ForeignKey(Establishment, verbose_name=_('Establishment'),
|
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)
|
||||||
|
class Meta:
|
||||||
|
unique_together = ['user', 'role']
|
||||||
|
|
||||||
|
|
||||||
class OldRole(models.Model):
|
class OldRole(models.Model):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user