58 lines
2.7 KiB
Python
58 lines
2.7 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.db import connections
|
|
from establishment.management.commands.add_position import namedtuplefetchall
|
|
from establishment.models import Establishment, Position, Employee, EstablishmentEmployee
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = '''Add employee position from old db to new db.
|
|
Run after add_position and add_employee!'''
|
|
|
|
def empl_position_sql(self):
|
|
with connections['legacy'].cursor() as cursor:
|
|
cursor.execute('''
|
|
select t.id,
|
|
t.profile_id,
|
|
t.establishment_id,
|
|
t.role,
|
|
t.start_date,
|
|
t.end_date
|
|
from
|
|
(
|
|
select
|
|
DISTINCT
|
|
a.id,
|
|
a.profile_id,
|
|
a.establishment_id,
|
|
a.role,
|
|
a.start_date,
|
|
a.end_date,
|
|
trim(CONCAT(p.firstname, ' ', p.lastname, ' ',
|
|
p.email,'')
|
|
) as name
|
|
from affiliations as a
|
|
join profiles p on p.id = a.profile_id
|
|
) t
|
|
where t.name is not null
|
|
''')
|
|
return namedtuplefetchall(cursor)
|
|
|
|
def handle(self, *args, **options):
|
|
objects = []
|
|
for e in self.empl_position_sql():
|
|
pos = Position.objects.filter(name={"en-GB": e.role}).first()
|
|
empl = Employee.objects.filter(old_id=e.profile_id).first()
|
|
est = Establishment.objects.filter(old_id=e.establishment_id).first()
|
|
if pos and empl and est:
|
|
est_empl = EstablishmentEmployee(
|
|
from_date=e.start_date, to_date=e.end_date,
|
|
old_id=e.id
|
|
)
|
|
est_empl.establishment = est
|
|
est_empl.employee = empl
|
|
est_empl.position = pos
|
|
objects.append(est_empl)
|
|
|
|
ee = EstablishmentEmployee.objects.bulk_create(objects)
|
|
self.stdout.write(self.style.WARNING(f'Created employee position objects.'))
|