from django.db import migrations from django.forms import modelform_factory from ccdb.utils.data import get_data_sources class Migration(migrations.Migration): def migrate(apps, schema_editor): sources = get_data_sources() if not sources: return c = sources['db0'] MeasurementUnit = apps.get_model('misc', 'MeasurementUnit') MeasurementType = apps.get_model('misc', 'MeasurementType') Material = apps.get_model('misc', 'Material') Color = apps.get_model('misc', 'Color') Container = apps.get_model('misc', 'Container') for model in [Container, MeasurementType, MeasurementUnit, Material, Color]: model.objects.all().delete() MUnitForm = modelform_factory(MeasurementUnit, fields=('name', 'code', 'unit_class', 'description', 'sort_order')) MTypeForm = modelform_factory(MeasurementType, fields=('name', 'code', 'measurement_type_class', 'description', 'default_measurement_unit', 'sort_order')) MaterialForm = modelform_factory(Material, fields=('name', 'code', 'material_class', 'description', 'sort_order')) ColorForm = modelform_factory(Color, fields=('name', 'code', 'color_number', 'sort_order')) ContainerForm = modelform_factory(Container, fields=('name', 'code', 'application', 'color', 'material', 'volume', 'measurement_unit', 'sort_order')) for r in c.execute('SELECT * FROM tbl_lu_measurement_units;'): form = MUnitForm(dict(name=r[1], code=r[2], unit_class=r[3], description=r[4], sort_order=int(r[5]) if r[5] else None)) if form.is_valid(): MeasurementUnit.objects.create(id=r[0], **form.cleaned_data) else: print('measurement unit', r[0:], form.errors.as_data()) for r in c.execute('SELECT * FROM tbl_lu_measurement_types;'): form = MTypeForm(dict(name=r[1], code=r[2], measurement_type_class=r[3], description=r[4], default_measurement_unit=r[5], sort_order=int(r[6]) if r[6] else None)) if form.is_valid(): MeasurementType.objects.create(id=r[0], **form.cleaned_data) else: print('measurement type', r[0:], form.errors.as_data()) for r in c.execute('SELECT * FROM tbl_lu_materials;'): form = MaterialForm(dict(name=r[1], code=r[2], material_class=r[3], description=r[4], sort_order=int(r[5]) if r[5] else None)) if form.is_valid(): Material.objects.create(id=r[0], **form.cleaned_data) else: print('material', r[0:], form.errors.as_data()) for r in c.execute('SELECT * FROM tbl_lu_colors;'): form = ColorForm(dict(name=r[1], code=r[2], color_number=float(r[3]) if r[3] else None, sort_order=int(r[4]) if r[4] else None)) if form.is_valid(): Color.objects.create(id=r[0], **form.cleaned_data) else: print('color', r[0:], form.errors.as_data()) for r in c.execute('SELECT * FROM tbl_lu_containers;'): form = ContainerForm(dict(name=r[1], code=r[2], application=r[3], color=r[4], material=r[5], volume=float(r[6]) if r[6] else None, measurement_unit=r[7], sort_order=int(r[8]) if r[8] else None)) if form.is_valid(): Container.objects.create(id=r[0], **form.cleaned_data) else: print('container', r[0:], form.errors.as_data()) def rollback(apps, schema_editor): MeasurementUnit = apps.get_model('misc', 'MeasurementUnit') MeasurementType = apps.get_model('misc', 'MeasurementType') Material = apps.get_model('misc', 'Material') Color = apps.get_model('misc', 'Color') Container = apps.get_model('misc', 'Container') for model in [Container, MeasurementType, MeasurementUnit, Material, Color]: model.objects.all().delete() dependencies = [ ('misc', '0001_initial'), ('projects', '0002_DATA_initial'), ] operations = [ migrations.RunPython(migrate, rollback), ]