diff --git a/src/etools/applications/action_points/categories/migrations/0001_initial.py b/src/etools/applications/action_points/categories/migrations/0001_initial.py index 86038b7287..85cd7edc27 100644 --- a/src/etools/applications/action_points/categories/migrations/0001_initial.py +++ b/src/etools/applications/action_points/categories/migrations/0001_initial.py @@ -1,9 +1,7 @@ -# Generated by Django 1.10.8 on 2018-07-31 09:22 -from __future__ import unicode_literals +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.utils.timezone from django.db import migrations, models - +import django.utils.timezone import model_utils.fields @@ -19,18 +17,17 @@ class Migration(migrations.Migration): name='Category', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(db_index=True, editable=False)), - ('module', models.CharField(choices=[('apd', 'Action Points'), ('t2f', 'Trip Management'), ('tpm', 'Third Party Monitoring'), ('audit', 'Financial Assurance')], max_length=10, verbose_name='Module')), - ('description', models.TextField(verbose_name='Description')), + ('order', models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('module', models.CharField(choices=[('apd', 'Action Points'), ('t2f', 'Trip Management'), ('tpm', 'Third Party Monitoring'), ('audit', 'Financial Assurance'), ('psea', 'PSEA Assessment'), ('fm', 'Field Monitoring')], max_length=10, verbose_name='Module')), + ('description', models.TextField(verbose_name='Description')), ], options={ + 'verbose_name': 'Action point category', + 'verbose_name_plural': 'Action point categories', 'ordering': ('module', 'order'), + 'unique_together': {('description', 'module')}, }, ), - migrations.AlterUniqueTogether( - name='category', - unique_together=set([('description', 'module')]), - ), ] diff --git a/src/etools/applications/action_points/categories/migrations/0002_auto_20190122_1412.py b/src/etools/applications/action_points/categories/migrations/0002_auto_20190122_1412.py deleted file mode 100644 index 524d80582e..0000000000 --- a/src/etools/applications/action_points/categories/migrations/0002_auto_20190122_1412.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-22 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('categories', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='category', - options={'ordering': ('module', 'order'), 'verbose_name': 'Action point category', 'verbose_name_plural': 'Action point categories'}, - ), - ] diff --git a/src/etools/applications/action_points/categories/migrations/0003_auto_20190227_1332.py b/src/etools/applications/action_points/categories/migrations/0003_auto_20190227_1332.py deleted file mode 100644 index 1f30befa8f..0000000000 --- a/src/etools/applications/action_points/categories/migrations/0003_auto_20190227_1332.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.5 on 2019-02-27 13:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('categories', '0002_auto_20190122_1412'), - ] - - operations = [ - migrations.AlterField( - model_name='category', - name='order', - field=models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order'), - ), - ] diff --git a/src/etools/applications/action_points/categories/migrations/0004_auto_20190820_2009.py b/src/etools/applications/action_points/categories/migrations/0004_auto_20190820_2009.py deleted file mode 100644 index c6f0a9b3c6..0000000000 --- a/src/etools/applications/action_points/categories/migrations/0004_auto_20190820_2009.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-20 20:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('categories', '0003_auto_20190227_1332'), - ] - - operations = [ - migrations.AlterField( - model_name='category', - name='module', - field=models.CharField(choices=[('apd', 'Action Points'), ('t2f', 'Trip Management'), ('tpm', 'Third Party Monitoring'), ('audit', 'Financial Assurance'), ('psea', 'PSEA Assessment')], max_length=10, verbose_name='Module'), - ), - ] diff --git a/src/etools/applications/action_points/categories/migrations/0005_auto_20191126_1133.py b/src/etools/applications/action_points/categories/migrations/0005_auto_20191126_1133.py deleted file mode 100644 index 3cc7e016e6..0000000000 --- a/src/etools/applications/action_points/categories/migrations/0005_auto_20191126_1133.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-26 11:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('categories', '0004_auto_20190820_2009'), - ] - - operations = [ - migrations.AlterField( - model_name='category', - name='module', - field=models.CharField(choices=[('apd', 'Action Points'), ('t2f', 'Trip Management'), ('tpm', 'Third Party Monitoring'), ('audit', 'Financial Assurance'), ('psea', 'PSEA Assessment'), ('fm', 'Field Monitoring')], max_length=10, verbose_name='Module'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0001_initial.py b/src/etools/applications/action_points/migrations/0001_initial.py index de20698922..49ca238f01 100644 --- a/src/etools/applications/action_points/migrations/0001_initial.py +++ b/src/etools/applications/action_points/migrations/0001_initial.py @@ -1,10 +1,7 @@ -# Generated by Django 1.10.8 on 2018-04-06 14:12 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion -import django.utils.timezone -from django.conf import settings from django.db import migrations, models - +import django.utils.timezone import django_fsm import model_utils.fields @@ -14,15 +11,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0002_auto_20180326_1605'), - ('t2f', '0001_initial'), - ('users', '0001_initial'), - ('tpm', '0001_initial'), - ('reports', '0001_initial'), - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('audit', '0002_auto_20180326_1605'), ] operations = [ @@ -30,48 +18,21 @@ class Migration(migrations.Migration): name='ActionPoint', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('status', django_fsm.FSMField(choices=[ - ('open', 'Open'), ('completed', 'Completed')], default='open', max_length=10, protected=True, verbose_name='Status')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('status', django_fsm.FSMField(choices=[('open', 'Open'), ('completed', 'Completed')], default='open', max_length=10, protected=True, verbose_name='Status')), ('description', models.TextField(verbose_name='Description')), ('due_date', models.DateField(blank=True, null=True, verbose_name='Due Date')), - ('priority', models.CharField(choices=[ - ('low', 'Low'), ('normal', 'Normal'), ('high', 'High')], default='normal', max_length=10, verbose_name='Priority')), - ('action_taken', models.TextField(blank=True, verbose_name='Action Taken')), - ('date_of_completion', model_utils.fields.MonitorField(blank=True, default=django.utils.timezone.now, - monitor='status', null=True, verbose_name='Date Action Point Completed', when=set(['completed']))), - ('assigned_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Assigned By')), - ('assigned_to', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='assigned_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Assigned To')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='created_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Author')), - ('cp_output', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='reports.Result', verbose_name='CP Output')), - ('engagement', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='audit.Engagement', verbose_name='Engagement')), - ('intervention', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='partners.Intervention', verbose_name='PD/SSFA')), - ('location', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='locations.Location', verbose_name='Location')), - ('office', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Office', verbose_name='Office')), - ('partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='partners.PartnerOrganization', verbose_name='Partner')), - ('section', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='reports.Section', verbose_name='Section')), - ('tpm_activity', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='tpm.TPMActivity', verbose_name='TPM Activity')), - ('travel_activity', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='t2f.TravelActivity', verbose_name='Travel Activity')), + ('high_priority', models.BooleanField(default=False, verbose_name='High Priority')), + ('date_of_completion', model_utils.fields.MonitorField(blank=True, default=None, monitor='status', null=True, verbose_name='Date Action Point Completed', when={'completed'})), + ('date_of_verification', model_utils.fields.MonitorField(blank=True, default=None, monitor='verified_by', null=True, verbose_name='Date Action Point Verified')), + ('reference_number', models.CharField(max_length=100, null=True, verbose_name='Reference Number')), + ('is_adequate', models.BooleanField(default=False, verbose_name='Is Adequate')), ], options={ - 'abstract': False, - 'ordering': ('id',), 'verbose_name': 'Action Point', 'verbose_name_plural': 'Action Points', + 'ordering': ('id',), }, ), ] diff --git a/src/etools/applications/action_points/migrations/0002_auto_20180518_0835.py b/src/etools/applications/action_points/migrations/0002_auto_20180518_0835.py deleted file mode 100644 index a1efa9389b..0000000000 --- a/src/etools/applications/action_points/migrations/0002_auto_20180518_0835.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-18 08:35 -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0003_make_not_nullable'), - ('action_points', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='actionpoint', - name='travel_activity', - ), - migrations.AddField( - model_name='actionpoint', - name='travel', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='t2f.Travel', verbose_name='Travel'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0002_initial.py b/src/etools/applications/action_points/migrations/0002_initial.py new file mode 100644 index 0000000000..32f1de5b87 --- /dev/null +++ b/src/etools/applications/action_points/migrations/0002_initial.py @@ -0,0 +1,112 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('psea', '0002_assessor_auditor_firm'), + ('field_monitoring_planning', '0002_initial'), + ('action_points', '0001_initial'), + ('partners', '0001_initial'), + ('reports', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('tpm', '0001_initial'), + ('categories', '0001_initial'), + ('locations', '0001_initial'), + ('audit', '0003_engagement_agreement'), + ('t2f', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='actionpoint', + name='assigned_by', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Assigned By'), + ), + migrations.AddField( + model_name='actionpoint', + name='assigned_to', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assigned_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Assigned To'), + ), + migrations.AddField( + model_name='actionpoint', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Author'), + ), + migrations.AddField( + model_name='actionpoint', + name='category', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='categories.category', verbose_name='Category'), + ), + migrations.AddField( + model_name='actionpoint', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='actionpoint', + name='engagement', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='audit.engagement', verbose_name='Engagement'), + ), + migrations.AddField( + model_name='actionpoint', + name='intervention', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.intervention', verbose_name='PD/SPD'), + ), + migrations.AddField( + model_name='actionpoint', + name='location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='locations.location', verbose_name='Location'), + ), + migrations.AddField( + model_name='actionpoint', + name='monitoring_activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_planning.monitoringactivity', verbose_name='Monitoring Activity'), + ), + migrations.AddField( + model_name='actionpoint', + name='office', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.office', verbose_name='Office'), + ), + migrations.AddField( + model_name='actionpoint', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='actionpoint', + name='potential_verifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points_to_verify', to=settings.AUTH_USER_MODEL, verbose_name='Potential Verifier'), + ), + migrations.AddField( + model_name='actionpoint', + name='psea_assessment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='psea.assessment', verbose_name='PSEA Assessment'), + ), + migrations.AddField( + model_name='actionpoint', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.section', verbose_name='Section'), + ), + migrations.AddField( + model_name='actionpoint', + name='tpm_activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='tpm.tpmactivity', verbose_name='TPM Activity'), + ), + migrations.AddField( + model_name='actionpoint', + name='travel_activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='t2f.travelactivity', verbose_name='Travel Activity'), + ), + migrations.AddField( + model_name='actionpoint', + name='verified_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='verified_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Verified By'), + ), + ] diff --git a/src/etools/applications/action_points/migrations/0003_auto_20180518_1610.py b/src/etools/applications/action_points/migrations/0003_auto_20180518_1610.py deleted file mode 100644 index 911c2f8ae5..0000000000 --- a/src/etools/applications/action_points/migrations/0003_auto_20180518_1610.py +++ /dev/null @@ -1,45 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-18 16:10 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0002_auto_20180518_0835'), - ] - - operations = [ - migrations.RemoveField( - model_name='actionpoint', - name='action_taken', - ), - migrations.RemoveField( - model_name='actionpoint', - name='priority', - ), - migrations.AddField( - model_name='actionpoint', - name='high_priority', - field=models.BooleanField(default=False, verbose_name='High Priority'), - ), - migrations.AlterField( - model_name='actionpoint', - name='date_of_completion', - field=model_utils.fields.MonitorField(blank=True, default=None, monitor='status', null=True, verbose_name='Date Action Point Completed', when=set(['completed'])), - ), - migrations.AlterField( - model_name='actionpoint', - name='office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.Office', verbose_name='Office'), - ), - migrations.AlterField( - model_name='actionpoint', - name='section', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.Section', verbose_name='Section'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0004_auto_20180521_1052.py b/src/etools/applications/action_points/migrations/0004_auto_20180521_1052.py deleted file mode 100644 index 231b235ef7..0000000000 --- a/src/etools/applications/action_points/migrations/0004_auto_20180521_1052.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-21 10:52 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0003_auto_20180518_1610'), - ] - - operations = [ - migrations.AlterField( - model_name='actionpoint', - name='engagement', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='audit.Engagement', verbose_name='Engagement'), - ), - migrations.AlterField( - model_name='actionpoint', - name='tpm_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='tpm.TPMActivity', verbose_name='TPM Activity'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0005_auto_20180713_0805.py b/src/etools/applications/action_points/migrations/0005_auto_20180713_0805.py deleted file mode 100644 index 6712dd1011..0000000000 --- a/src/etools/applications/action_points/migrations/0005_auto_20180713_0805.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-13 08:05 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0004_auto_20180524_1831'), - ('action_points', '0004_auto_20180521_1052'), - ] - - operations = [ - migrations.RemoveField( - model_name='actionpoint', - name='travel', - ), - migrations.AddField( - model_name='actionpoint', - name='travel_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='t2f.TravelActivity', verbose_name='Travel'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0006_auto_20180718_1439.py b/src/etools/applications/action_points/migrations/0006_auto_20180718_1439.py deleted file mode 100644 index ae87350ab3..0000000000 --- a/src/etools/applications/action_points/migrations/0006_auto_20180718_1439.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-18 14:39 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0005_auto_20180713_0805'), - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(db_index=True, editable=False)), - ('module', models.CharField(choices=[('apd', 'Action Points'), ('t2f', 'Trip Management'), ('tpm', 'Third Party Monitoring'), ('audit', 'Financial Assurance')], max_length=10, verbose_name='Module')), - ('description', models.TextField(verbose_name='Description')), - ], - options={ - 'ordering': ('module', 'order'), - }, - ), - migrations.AlterUniqueTogether( - name='category', - unique_together=set([('description', 'module')]), - ), - migrations.AddField( - model_name='actionpoint', - name='category', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='action_points.Category', verbose_name='Category'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0007_auto_20180731_0920.py b/src/etools/applications/action_points/migrations/0007_auto_20180731_0920.py deleted file mode 100644 index c4d95823fb..0000000000 --- a/src/etools/applications/action_points/migrations/0007_auto_20180731_0920.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-31 09:20 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -def copy_categories(apps, schema_editor): - OldCategory = apps.get_model('action_points', 'Category') - NewCategory = apps.get_model('categories', 'Category') - - for category in OldCategory.objects.all(): - NewCategory.objects.get_or_create(module=category.module, description=category.description, - defaults={'order': category.order}) - - -def migrate_categories(apps, schema_editor): - ActionPoint = apps.get_model('action_points', 'ActionPoint') - Category = apps.get_model('categories', 'Category') - - for action_point in ActionPoint.objects.filter(category__isnull=False): - action_point.category1 = Category.objects.get(module=action_point.category.module, - description=action_point.category.description) - action_point.save() - - -class Migration(migrations.Migration): - dependencies = [ - ('action_points', '0006_auto_20180718_1439'), - ('categories', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='actionpoint', - name='category1', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='categories.Category', verbose_name='Category'), - ), - migrations.RunPython(copy_categories, migrations.RunPython.noop), - migrations.RunPython(migrate_categories, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/action_points/migrations/0008_auto_20180731_1050.py b/src/etools/applications/action_points/migrations/0008_auto_20180731_1050.py deleted file mode 100644 index 999dd761c4..0000000000 --- a/src/etools/applications/action_points/migrations/0008_auto_20180731_1050.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-31 10:50 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0007_auto_20180731_0920'), - ] - - operations = [ - migrations.RemoveField( - model_name='actionpoint', - name='category' - ), - migrations.RenameField( - model_name='actionpoint', - old_name='category1', - new_name='category' - ), - migrations.DeleteModel( - name='Category', - ), - ] diff --git a/src/etools/applications/action_points/migrations/0009_auto_20190523_1146.py b/src/etools/applications/action_points/migrations/0009_auto_20190523_1146.py deleted file mode 100644 index a11c6190f6..0000000000 --- a/src/etools/applications/action_points/migrations/0009_auto_20190523_1146.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.1 on 2019-05-23 11:46 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0008_auto_20180731_1050'), - ] - - operations = [ - migrations.AlterField( - model_name='actionpoint', - name='travel_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='t2f.TravelActivity', verbose_name='Travel Activity'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0010_actionpoint_psea_assessment.py b/src/etools/applications/action_points/migrations/0010_actionpoint_psea_assessment.py deleted file mode 100644 index 93ac074165..0000000000 --- a/src/etools/applications/action_points/migrations/0010_actionpoint_psea_assessment.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-20 20:14 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0002_auto_20190820_1618'), - ('action_points', '0009_auto_20190523_1146'), - ] - - operations = [ - migrations.AddField( - model_name='actionpoint', - name='psea_assessment', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points', to='psea.Assessment', verbose_name='PSEA Assessment'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0011_actionpoint_reference_number.py b/src/etools/applications/action_points/migrations/0011_actionpoint_reference_number.py deleted file mode 100644 index 654f94036d..0000000000 --- a/src/etools/applications/action_points/migrations/0011_actionpoint_reference_number.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 2.2.3 on 2019-08-14 11:51 - -from django.db import connection, migrations, models - - -def set_reference_number(apps, schema_editor): - - # Only run this when NOT in test - if connection.tenant.schema_name != "test": - Country = apps.get_model("users", "country") - ActionPoint = apps.get_model("action_points", "actionpoint") - country = Country.objects.get( - schema_name=connection.tenant.schema_name, - ) - for action in ActionPoint.objects.all(): - action.reference_number = '{}/{}/{}/APD'.format( - country.country_short_code, - action.created.year, - action.pk, - ) - action.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0010_actionpoint_psea_assessment'), - ] - - operations = [ - migrations.AddField( - model_name='actionpoint', - name='reference_number', - field=models.CharField(max_length=100, null=True, verbose_name='Reference Number'), - ), - migrations.RunPython(set_reference_number, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/action_points/migrations/0012_auto_20191011_1303.py b/src/etools/applications/action_points/migrations/0012_auto_20191011_1303.py deleted file mode 100644 index ff763dfe9b..0000000000 --- a/src/etools/applications/action_points/migrations/0012_auto_20191011_1303.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-11 13:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0021_auto_20191011_1201'), - ('action_points', '0011_actionpoint_reference_number'), - ] - - operations = [ - migrations.AlterField( - model_name='actionpoint', - name='office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.Office', verbose_name='Office'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0013_actionpoint_monitoring_activity.py b/src/etools/applications/action_points/migrations/0013_actionpoint_monitoring_activity.py deleted file mode 100644 index 70c63fad75..0000000000 --- a/src/etools/applications/action_points/migrations/0013_actionpoint_monitoring_activity.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-26 11:33 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0002_auto_20191119_1503'), - ('action_points', '0012_auto_20191011_1303'), - ] - - operations = [ - migrations.AddField( - model_name='actionpoint', - name='monitoring_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_planning.MonitoringActivity', verbose_name='Monitoring Activity'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0014_auto_20210108_1634.py b/src/etools/applications/action_points/migrations/0014_auto_20210108_1634.py deleted file mode 100644 index 31a2b30e08..0000000000 --- a/src/etools/applications/action_points/migrations/0014_auto_20210108_1634.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2021-01-08 16:34 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0013_actionpoint_monitoring_activity'), - ] - - operations = [ - migrations.AlterField( - model_name='actionpoint', - name='intervention', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.Intervention', verbose_name='PD/SPD'), - ), - ] diff --git a/src/etools/applications/action_points/migrations/0015_auto_20240212_0717.py b/src/etools/applications/action_points/migrations/0015_auto_20240212_0717.py deleted file mode 100644 index 1d015f6c50..0000000000 --- a/src/etools/applications/action_points/migrations/0015_auto_20240212_0717.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.19 on 2024-02-12 07:17 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('action_points', '0014_auto_20210108_1634'), - ] - - operations = [ - migrations.AddField( - model_name='actionpoint', - name='date_of_verification', - field=model_utils.fields.MonitorField(blank=True, default=None, monitor='verified_by', null=True, verbose_name='Date Action Point Verified'), - ), - migrations.AddField( - model_name='actionpoint', - name='is_adequate', - field=models.BooleanField(default=False, verbose_name='Is Adequate'), - ), - migrations.AddField( - model_name='actionpoint', - name='potential_verifier', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='action_points_to_verify', to=settings.AUTH_USER_MODEL, verbose_name='Potential Verifier'), - ), - migrations.AddField( - model_name='actionpoint', - name='verified_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='verified_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Verified By'), - ), - ] diff --git a/src/etools/applications/activities/migrations/0001_initial.py b/src/etools/applications/activities/migrations/0001_initial.py index 8633951170..6bd5314bab 100644 --- a/src/etools/applications/activities/migrations/0001_initial.py +++ b/src/etools/applications/activities/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 from django.db import migrations, models diff --git a/src/etools/applications/activities/migrations/0002_auto_20180326_1605.py b/src/etools/applications/activities/migrations/0002_initial.py similarity index 55% rename from src/etools/applications/activities/migrations/0002_auto_20180326_1605.py rename to src/etools/applications/activities/migrations/0002_initial.py index 3114b3d03e..7fb0c9563c 100644 --- a/src/etools/applications/activities/migrations/0002_auto_20180326_1605.py +++ b/src/etools/applications/activities/migrations/0002_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -10,35 +10,30 @@ class Migration(migrations.Migration): dependencies = [ ('activities', '0001_initial'), - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('reports', '0001_initial'), ('partners', '0001_initial'), + ('reports', '0001_initial'), + ('locations', '0001_initial'), ] operations = [ migrations.AddField( model_name='activity', name='cp_output', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Result', verbose_name='CP Output'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.result', verbose_name='CP Output'), ), migrations.AddField( model_name='activity', name='intervention', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='partners.Intervention', verbose_name='Intervention'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.intervention', verbose_name='Intervention'), ), migrations.AddField( model_name='activity', name='locations', - field=models.ManyToManyField(related_name='_activity_locations_+', - to='locations.Location', verbose_name='Locations'), + field=models.ManyToManyField(related_name='_activities_activity_locations_+', to='locations.Location', verbose_name='Locations'), ), migrations.AddField( model_name='activity', name='partner', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='partners.PartnerOrganization', verbose_name='Implementing Partner'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.partnerorganization', verbose_name='Implementing Partner'), ), ] diff --git a/src/etools/applications/activities/migrations/0003_auto_20190722_1417.py b/src/etools/applications/activities/migrations/0003_auto_20190722_1417.py deleted file mode 100644 index ebc7099e2a..0000000000 --- a/src/etools/applications/activities/migrations/0003_auto_20190722_1417.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-22 14:17 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('activities', '0002_auto_20180326_1605'), - ] - - operations = [ - migrations.AlterField( - model_name='activity', - name='intervention', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.Intervention', verbose_name='Intervention'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0001_initial.py b/src/etools/applications/attachments/migrations/0001_initial.py index 4d5e982f3b..f0f1a0ee48 100644 --- a/src/etools/applications/attachments/migrations/0001_initial.py +++ b/src/etools/applications/attachments/migrations/0001_initial.py @@ -1,14 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion -import django.utils.timezone -from django.conf import settings from django.db import migrations, models - -import model_utils.fields -from unicef_attachments.models import generate_file_path - -import etools.applications.attachments.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -16,31 +9,10 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('unicef_attachments', '0007_alter_attachment_hyperlink'), ] operations = [ - migrations.CreateModel( - name='Attachment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('file', models.FileField(blank=True, max_length=1024, null=True, - upload_to=generate_file_path, verbose_name='File Attachment')), - ('hyperlink', models.CharField(blank=True, max_length=255, null=True, verbose_name='Hyperlink')), - ('object_id', models.IntegerField(verbose_name='Object ID')), - ('code', models.CharField(blank=True, max_length=64, verbose_name='Code')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='contenttypes.ContentType', verbose_name='Content Type')), - ], - options={ - 'ordering': ['id'], - }, - ), migrations.CreateModel( name='AttachmentFlat', fields=[ @@ -48,41 +20,18 @@ class Migration(migrations.Migration): ('partner', models.CharField(blank=True, max_length=255, verbose_name='Partner')), ('partner_type', models.CharField(blank=True, max_length=150, verbose_name='Partner Type')), ('vendor_number', models.CharField(blank=True, max_length=50, verbose_name='Vendor Number')), + ('pd_ssfa', models.IntegerField(blank=True, null=True, verbose_name='PD SSFA ID')), ('pd_ssfa_number', models.CharField(blank=True, max_length=64, verbose_name='PD SSFA Number')), + ('agreement_reference_number', models.CharField(blank=True, max_length=100, verbose_name='Agreement Reference Number')), + ('object_link', models.URLField(blank=True, verbose_name='Object Link')), ('file_type', models.CharField(blank=True, max_length=100, verbose_name='File Type')), ('file_link', models.CharField(blank=True, max_length=1024, verbose_name='File Link')), + ('filename', models.CharField(blank=True, max_length=1024, verbose_name='File Name')), + ('source', models.CharField(blank=True, max_length=150, verbose_name='Source')), ('uploaded_by', models.CharField(blank=True, max_length=255, verbose_name='Uploaded by')), - ('created', models.CharField(max_length=50, verbose_name='Created')), - ('attachment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='attachments.Attachment')), + ('created', models.DateTimeField(null=True, verbose_name='Created')), + ('ip_address', models.GenericIPAddressField(default='0.0.0.0')), + ('attachment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='denormalized', to='unicef_attachments.attachment')), ], ), - migrations.CreateModel( - name='FileType', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(db_index=True, editable=False)), - ('name', models.CharField(max_length=64, verbose_name='Name')), - ('label', models.CharField(max_length=64, verbose_name='Label')), - ('code', models.CharField(default='', max_length=64, verbose_name='Code')), - ], - options={ - 'ordering': ('code', 'order'), - }, - ), - migrations.AlterUniqueTogether( - name='filetype', - unique_together=set([('name', 'code')]), - ), - migrations.AddField( - model_name='attachment', - name='file_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='attachments.FileType', verbose_name='Document Type'), - ), - migrations.AddField( - model_name='attachment', - name='uploaded_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='attachments', to=settings.AUTH_USER_MODEL, verbose_name='Uploaded By'), - ), ] diff --git a/src/etools/applications/attachments/migrations/0002_attachmentflat_filename.py b/src/etools/applications/attachments/migrations/0002_attachmentflat_filename.py deleted file mode 100644 index d9743fc1e9..0000000000 --- a/src/etools/applications/attachments/migrations/0002_attachmentflat_filename.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-30 10:01 - -import os -from urllib.parse import urlsplit - -from django.db import migrations, models - - -def update_attachments_flat_filename(apps, schema_editor): - AttachmentFlat = apps.get_model("attachments", "attachmentflat") - for flat in AttachmentFlat.objects.all(): - flat.filename = os.path.basename( - flat.attachment.file.name - if flat.attachment.file - else urlsplit(flat.attachment.hyperlink).path - ) - flat.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='filename', - field=models.CharField(blank=True, max_length=1024, verbose_name='File Name'), - ), - migrations.RunPython( - update_attachments_flat_filename, - reverse_code=migrations.RunPython.noop, - ) - ] diff --git a/src/etools/applications/attachments/migrations/0003_fix_null_values.py b/src/etools/applications/attachments/migrations/0003_fix_null_values.py deleted file mode 100644 index cf6a45c2a1..0000000000 --- a/src/etools/applications/attachments/migrations/0003_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0002_attachmentflat_filename'), - ] - - operations = [ - ] diff --git a/src/etools/applications/attachments/migrations/0004_make_not_nullable.py b/src/etools/applications/attachments/migrations/0004_make_not_nullable.py deleted file mode 100644 index ddb4db3ba0..0000000000 --- a/src/etools/applications/attachments/migrations/0004_make_not_nullable.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-19 16:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0003_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='attachment', - name='hyperlink', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Hyperlink'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0005_attachmentflat_agreement_reference_number.py b/src/etools/applications/attachments/migrations/0005_attachmentflat_agreement_reference_number.py deleted file mode 100644 index 846903bd7d..0000000000 --- a/src/etools/applications/attachments/migrations/0005_attachmentflat_agreement_reference_number.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-06-06 10:29 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0004_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='agreement_reference_number', - field=models.CharField(blank=True, max_length=100, verbose_name='Agreement Reference Number'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0006_auto_20180321_1423.py b/src/etools/applications/attachments/migrations/0006_auto_20180321_1423.py deleted file mode 100644 index ea1abcaeae..0000000000 --- a/src/etools/applications/attachments/migrations/0006_auto_20180321_1423.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-21 14:23 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0005_attachmentflat_agreement_reference_number'), - ] - - operations = [ - migrations.AlterField( - model_name='attachment', - name='content_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Content Type'), - ), - migrations.AlterField( - model_name='attachment', - name='file_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='attachments.FileType', verbose_name='Document Type'), - ), - migrations.AlterField( - model_name='attachment', - name='object_id', - field=models.IntegerField(blank=True, null=True, verbose_name='Object ID'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0007_auto_20180322_1723.py b/src/etools/applications/attachments/migrations/0007_auto_20180322_1723.py deleted file mode 100644 index f671ed7799..0000000000 --- a/src/etools/applications/attachments/migrations/0007_auto_20180322_1723.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-22 17:23 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0006_auto_20180321_1423'), - ] - - operations = [ - migrations.AlterField( - model_name='attachmentflat', - name='attachment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='denormalized', to='attachments.Attachment'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0008_auto_20180717_1535.py b/src/etools/applications/attachments/migrations/0008_auto_20180717_1535.py deleted file mode 100644 index ccaec07f39..0000000000 --- a/src/etools/applications/attachments/migrations/0008_auto_20180717_1535.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-17 15:35 -from __future__ import unicode_literals - -from django.db import migrations - - -def migrate_core_value_assessment(apps, schema_editor): - Attachment = apps.get_model('attachments', 'Attachment') - PartnerOrganization = apps.get_model('partners', 'PartnerOrganization') - attachments = Attachment.objects.filter(content_type__app_label='partners', - content_type__model='partnerorganization', - code='partners_partner_assessment') - ContentType = apps.get_model('contenttypes', 'ContentType') - cva_ct = ContentType.objects.get(app_label='partners', model='corevaluesassessment') - for attachment in attachments: - partner = PartnerOrganization.objects.get(pk=attachment.object_id) - assert partner.core_values_assessments.count() == 1 - cva = partner.core_values_assessments.first() - attachment.object_id = cva.id - attachment.content_type = cva_ct - attachment.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0007_auto_20180322_1723'), - ('partners', '0018_auto_20180717_1536'), - ] - - operations = [ - migrations.RunPython(migrate_core_value_assessment, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/attachments/migrations/0009_attachmentflat_agreement_link.py b/src/etools/applications/attachments/migrations/0009_attachmentflat_agreement_link.py deleted file mode 100644 index a1c701f392..0000000000 --- a/src/etools/applications/attachments/migrations/0009_attachmentflat_agreement_link.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-20 17:23 -from __future__ import unicode_literals - -from django.urls import reverse -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0008_auto_20180717_1535'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='object_link', - field=models.URLField(blank=True, verbose_name='Object Link'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0010_auto_20180802_1245.py b/src/etools/applications/attachments/migrations/0010_auto_20180802_1245.py deleted file mode 100644 index 06fe38d349..0000000000 --- a/src/etools/applications/attachments/migrations/0010_auto_20180802_1245.py +++ /dev/null @@ -1,81 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-02 12:45 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -def migrate_file_types(apps, schema_editor): - FileTypeOld = apps.get_model("attachments", "filetype") - FileType = apps.get_model("unicef_attachments", "filetype") - for f in FileTypeOld.objects.all(): - FileType.objects.create( - id=f.pk, - name=f.name, - label=f.label, - code=f.code, - order=f.order, - ) - - -def migrate_attachments(apps, schema_editor): - AttachmentOld = apps.get_model("attachments", "attachment") - Attachment = apps.get_model("unicef_attachments", "attachment") - FileType = apps.get_model("unicef_attachments", "filetype") - for a in AttachmentOld.objects.all(): - try: - ft = FileType.objects.get(pk=a.file_type.pk) - except AttributeError: - ft = None - Attachment.objects.create( - id=a.pk, - file_type=ft, - file=a.file, - hyperlink=a.hyperlink, - content_type=a.content_type, - object_id=a.object_id, - code=a.code, - uploaded_by=a.uploaded_by, - created=a.created, - modified=a.modified, - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0009_attachmentflat_agreement_link'), - ('unicef_attachments', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='attachment', - name='content_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attachments_old', to='contenttypes.ContentType', verbose_name='Content Type'), - ), - migrations.AlterField( - model_name='attachment', - name='file_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attachments_old', to='attachments.FileType', verbose_name='Document Type'), - ), - migrations.AlterField( - model_name='attachment', - name='uploaded_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attachments_old', to=settings.AUTH_USER_MODEL, verbose_name='Uploaded By'), - ), - migrations.RunPython( - migrate_file_types, - migrations.RunPython.noop - ), - migrations.RunPython( - migrate_attachments, - migrations.RunPython.noop - ), - migrations.AlterField( - model_name='attachmentflat', - name='attachment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='denormalized', to='unicef_attachments.Attachment'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0011_auto_20180820_1209.py b/src/etools/applications/attachments/migrations/0011_auto_20180820_1209.py deleted file mode 100644 index 9a9419522d..0000000000 --- a/src/etools/applications/attachments/migrations/0011_auto_20180820_1209.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-20 12:09 -from __future__ import unicode_literals - -from django.db import connection, migrations -from django.db.models import Max - - -def reset_attachment_seq(apps, schema_editor): - Attachment = apps.get_model("unicef_attachments", "attachment") - qs = Attachment.objects.all().aggregate(max_id=Max("id")) - with connection.cursor() as cursor: - cursor.execute( - "select setval('unicef_attachments_attachment_id_seq', %s, true)", - [qs["max_id"]] - ) - - -def reset_filetype_seq(apps, schema_editor): - FileType = apps.get_model("unicef_attachments", "filetype") - qs = FileType.objects.all().aggregate(max_id=Max("id")) - with connection.cursor() as cursor: - cursor.execute( - "select setval('unicef_attachments_filetype_id_seq', %s, true)", - [qs["max_id"]] - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0010_auto_20180802_1245'), - ] - - operations = [ - migrations.RunPython( - reset_attachment_seq, - migrations.RunPython.noop - ), - migrations.RunPython( - reset_filetype_seq, - migrations.RunPython.noop - ), - ] diff --git a/src/etools/applications/attachments/migrations/0012_attachmentflat_source.py b/src/etools/applications/attachments/migrations/0012_attachmentflat_source.py deleted file mode 100644 index 5d8789dc4c..0000000000 --- a/src/etools/applications/attachments/migrations/0012_attachmentflat_source.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-23 16:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0011_auto_20180820_1209'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='source', - field=models.CharField(blank=True, max_length=150, verbose_name='Source'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0013_attachmentflat_pd_ssfa.py b/src/etools/applications/attachments/migrations/0013_attachmentflat_pd_ssfa.py deleted file mode 100644 index dc10aa81d2..0000000000 --- a/src/etools/applications/attachments/migrations/0013_attachmentflat_pd_ssfa.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-11-02 16:20 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0012_attachmentflat_source'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='pd_ssfa', - field=models.IntegerField(blank=True, null=True, verbose_name='PD SSFA ID'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0014_auto_20190204_0915.py b/src/etools/applications/attachments/migrations/0014_auto_20190204_0915.py deleted file mode 100644 index bfc8474aa8..0000000000 --- a/src/etools/applications/attachments/migrations/0014_auto_20190204_0915.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.0.9 on 2019-02-04 09:15 - -from django.db import migrations - -def update_internal_prc_review_file_type(apps, schema_editor): - AttachmentFileType = apps.get_model("unicef_attachments", "filetype") - try: - file_type = AttachmentFileType.objects.get( - code="partners_intervention_amendment_internal_prc_review", - ) - except AttachmentFileType.DoesNotExist: - pass - else: - file_type.label = "Internal PRC Review" - file_type.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0013_attachmentflat_pd_ssfa'), - ] - - operations = [ - migrations.RunPython( - update_internal_prc_review_file_type, - ) - ] diff --git a/src/etools/applications/attachments/migrations/0015_auto_20190227_1332.py b/src/etools/applications/attachments/migrations/0015_auto_20190227_1332.py deleted file mode 100644 index f3aa4bc3d6..0000000000 --- a/src/etools/applications/attachments/migrations/0015_auto_20190227_1332.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.5 on 2019-02-27 13:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0014_auto_20190204_0915'), - ] - - operations = [ - migrations.AlterField( - model_name='filetype', - name='order', - field=models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order'), - ), - ] diff --git a/src/etools/applications/attachments/migrations/0016_auto_20190708_1607.py b/src/etools/applications/attachments/migrations/0016_auto_20190708_1607.py deleted file mode 100644 index 11eaf32d60..0000000000 --- a/src/etools/applications/attachments/migrations/0016_auto_20190708_1607.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.1 on 2019-07-08 16:07 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0015_auto_20190227_1332'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='filetype', - unique_together=None, - ), - migrations.DeleteModel( - name='Attachment', - ), - migrations.DeleteModel( - name='FileType', - ), - ] diff --git a/src/etools/applications/attachments/migrations/0017_attachmentflat_created_timestamp.py b/src/etools/applications/attachments/migrations/0017_attachmentflat_created_timestamp.py deleted file mode 100644 index 9d79244c26..0000000000 --- a/src/etools/applications/attachments/migrations/0017_attachmentflat_created_timestamp.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-13 17:25 - -import datetime - -from django.db import migrations, models - - -def set_created_timestamp(apps, schema_view): - AttachmentFlat = apps.get_model("attachments", "attachmentflat") - for attachment in AttachmentFlat.objects.all(): - attachment.created_timestamp = datetime.datetime.strptime( - attachment.created, - "%d %b %Y", - ) - attachment.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0016_auto_20190708_1607'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='created_timestamp', - field=models.DateTimeField(null=True, verbose_name='Created'), - ), - migrations.RunPython( - set_created_timestamp, - reverse_code=migrations.RunPython.noop, - ) - ] diff --git a/src/etools/applications/attachments/migrations/0018_remove_attachmentflat_created.py b/src/etools/applications/attachments/migrations/0018_remove_attachmentflat_created.py deleted file mode 100644 index d5cbb99dc4..0000000000 --- a/src/etools/applications/attachments/migrations/0018_remove_attachmentflat_created.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-13 17:40 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0017_attachmentflat_created_timestamp'), - ] - - operations = [ - migrations.RemoveField( - model_name='attachmentflat', - name='created', - ), - migrations.RenameField( - model_name='attachmentflat', - old_name='created_timestamp', - new_name='created', - ), - ] diff --git a/src/etools/applications/attachments/migrations/0019_attachmentflat_ip_address.py b/src/etools/applications/attachments/migrations/0019_attachmentflat_ip_address.py deleted file mode 100644 index 693250f471..0000000000 --- a/src/etools/applications/attachments/migrations/0019_attachmentflat_ip_address.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2021-11-24 00:02 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('attachments', '0018_remove_attachmentflat_created'), - ] - - operations = [ - migrations.AddField( - model_name='attachmentflat', - name='ip_address', - field=models.GenericIPAddressField(default='0.0.0.0'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0001_initial.py b/src/etools/applications/audit/migrations/0001_initial.py index 8e6d7f42fa..b8fbdf589b 100644 --- a/src/etools/applications/audit/migrations/0001_initial.py +++ b/src/etools/applications/audit/migrations/0001_initial.py @@ -1,12 +1,13 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import django.contrib.postgres.fields +from django.db import migrations, models import django.db.models.deletion import django.utils.timezone -from django.conf import settings -from django.db import migrations, models - import django_fsm +import etools.applications.audit.models +import etools.libraries.djangolib.fields +import etools.libraries.djangolib.models import model_utils.fields @@ -15,26 +16,10 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('action_points', '0001_initial'), ] operations = [ - migrations.CreateModel( - name='AuditPermission', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('user_type', models.CharField(max_length=30)), - ('permission', models.CharField(choices=[('view', 'View'), - ('edit', 'Edit'), ('action', 'Action')], max_length=10)), - ('permission_type', models.CharField(choices=[ - ('allow', 'Allow'), ('disallow', 'Disallow')], default='allow', max_length=10)), - ('target', models.CharField(max_length=100)), - ('instance_status', models.CharField(max_length=32, verbose_name='Instance Status')), - ], - options={ - 'abstract': False, - }, - ), migrations.CreateModel( name='DetailedFindingInfo', fields=[ @@ -42,79 +27,58 @@ class Migration(migrations.Migration): ('finding', models.TextField(verbose_name='Description of Finding')), ('recommendation', models.TextField(verbose_name='Recommendation and IP Management Response')), ], + options={ + 'verbose_name': 'Detailed Finding Info', + 'verbose_name_plural': 'Detailed Findings Info', + 'ordering': ('id',), + }, ), migrations.CreateModel( name='Engagement', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('status', django_fsm.FSMField(choices=[('partner_contacted', 'IP Contacted'), ('report_submitted', 'Report Submitted'), ( - 'final', 'Final Report'), ('cancelled', 'Cancelled')], default='partner_contacted', max_length=30, protected=True, verbose_name='Status')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('status', django_fsm.FSMField(choices=[('partner_contacted', 'IP Contacted'), ('report_submitted', 'Report Submitted'), ('final', 'Final Report'), ('cancelled', 'Cancelled')], default='partner_contacted', max_length=30, verbose_name='Status')), ('partner_contacted_at', models.DateField(blank=True, null=True, verbose_name='Date IP was contacted')), - ('engagement_type', models.CharField(choices=[('audit', 'Audit'), ('ma', 'Micro Assessment'), ( - 'sc', 'Spot Check'), ('sa', 'Special Audit')], max_length=10, verbose_name='Engagement Type')), - ('start_date', models.DateField(blank=True, null=True, verbose_name='Period Start Date')), - ('end_date', models.DateField(blank=True, null=True, verbose_name='Period End Date')), - ('total_value', models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Total value of selected FACE form(s)')), + ('engagement_type', models.CharField(choices=[('audit', 'Audit'), ('ma', 'Micro Assessment'), ('sc', 'Spot Check'), ('sa', 'Special Audit')], max_length=10, verbose_name='Engagement Type')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start date of first reporting FACE')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='End date of last reporting FACE')), + ('total_value', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total value of selected FACE form(s)')), + ('exchange_rate', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Exchange Rate')), + ('currency_of_report', etools.libraries.djangolib.fields.CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLE', 'SLE'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=5, null=True, verbose_name='Currency of Report')), ('date_of_field_visit', models.DateField(blank=True, null=True, verbose_name='Date of Field Visit')), - ('date_of_draft_report_to_ip', models.DateField(blank=True, - null=True, verbose_name='Date Draft Report Issued to IP')), - ('date_of_comments_by_ip', models.DateField(blank=True, - null=True, verbose_name='Date Comments Received from IP')), - ('date_of_draft_report_to_unicef', models.DateField(blank=True, - null=True, verbose_name='Date Draft Report Issued to UNICEF')), - ('date_of_comments_by_unicef', models.DateField(blank=True, - null=True, verbose_name='Date Comments Received from UNICEF')), + ('date_of_draft_report_to_ip', models.DateField(blank=True, null=True, verbose_name='Date Draft Report Issued to IP')), + ('date_of_comments_by_ip', models.DateField(blank=True, null=True, verbose_name='Date Comments Received from IP')), + ('date_of_draft_report_to_unicef', models.DateField(blank=True, null=True, verbose_name='Date Draft Report Issued to UNICEF')), + ('date_of_comments_by_unicef', models.DateField(blank=True, null=True, verbose_name='Date Comments Received from UNICEF')), ('date_of_report_submit', models.DateField(blank=True, null=True, verbose_name='Date Report Submitted')), ('date_of_final_report', models.DateField(blank=True, null=True, verbose_name='Date Report Finalized')), ('date_of_cancel', models.DateField(blank=True, null=True, verbose_name='Date Report Cancelled')), - ('amount_refunded', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Amount Refunded')), - ('additional_supporting_documentation_provided', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Additional Supporting Documentation Provided')), - ('justification_provided_and_accepted', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Justification Provided and Accepted')), - ('write_off_required', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Impairment')), - ('explanation_for_additional_information', models.TextField( - blank=True, verbose_name='Provide explanation for additional information received from the IP or add attachments')), - ('joint_audit', models.BooleanField(default=False, verbose_name='Joint Audit')), - ('shared_ip_with', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ( - 'UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, default=[], size=None, verbose_name='Shared IP with')), + ('amount_refunded', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Amount Refunded')), + ('additional_supporting_documentation_provided', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Additional Supporting Documentation Provided')), + ('justification_provided_and_accepted', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Justification Provided and Accepted')), + ('write_off_required', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Impairment')), + ('explanation_for_additional_information', models.TextField(blank=True, verbose_name='Provide explanation for additional information received from the IP or add attachments')), + ('joint_audit', models.BooleanField(blank=True, default=False, verbose_name='Joint Audit')), + ('year_of_audit', models.PositiveSmallIntegerField(db_index=True, default=etools.applications.audit.models.get_current_year, null=True)), + ('shared_ip_with', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ('UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, default=list, size=None, verbose_name='Shared Audit with')), ('cancel_comment', models.TextField(blank=True, verbose_name='Cancel Comment')), + ('send_back_comment', models.TextField(blank=True, verbose_name='Send Back Comment')), + ('reference_number', models.CharField(max_length=100, null=True, verbose_name='Reference Number')), ], options={ - 'ordering': ('id', ), 'verbose_name': 'Engagement', 'verbose_name_plural': 'Engagements', + 'ordering': ('id',), }, - ), - migrations.CreateModel( - name='EngagementActionPoint', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('category', models.CharField(choices=[('Invoice and receive reimbursement of ineligible expenditure', 'Invoice and receive reimbursement of ineligible expenditure'), ('Change cash transfer modality (DCT, reimbursement or direct payment)', 'Change cash transfer modality (DCT, reimbursement or direct payment)'), ('IP to incur and report on additional expenditure', 'IP to incur and report on additional expenditure'), ('Review and amend ICE or budget', 'Review and amend ICE or budget'), ('IP to correct FACE form or Statement of Expenditure', 'IP to correct FACE form or Statement of Expenditure'), ('Schedule a programmatic visit', 'Schedule a programmatic visit'), ( - 'Schedule a follow-up spot check', 'Schedule a follow-up spot check'), ('Schedule an audit', 'Schedule an audit'), ('Block future cash transfers', 'Block future cash transfers'), ('Block or mark vendor for deletion', 'Block or mark vendor for deletion'), ('Escalate to Chief of Operations, Dep Rep, or Rep', 'Escalate to Chief of Operations, Dep Rep, or Rep'), ('Escalate to Investigation', 'Escalate to Investigation'), ('Capacity building / Discussion with partner', 'Capacity building / Discussion with partner'), ('Change IP risk rating', 'Change IP risk rating'), ('Other', 'Other')], max_length=100, verbose_name='Category')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('due_date', models.DateField(verbose_name='Due Date')), - ('action_taken', models.TextField(blank=True, verbose_name='Action Taken')), - ('status', models.CharField(choices=[('open', 'Open'), ('closed', - 'Closed')], default='open', max_length=10, verbose_name='Status')), - ('high_priority', models.BooleanField(default=False, verbose_name='High Priority')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='created_engagement_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Author')), - ], + bases=(etools.libraries.djangolib.models.InheritedModelMixin, models.Model), ), migrations.CreateModel( name='FinancialFinding', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(choices=[('no-supporting-documentation', 'No supporting documentation'), ('insufficient-supporting-documentation', 'Insufficient supporting documentation'), ('cut-off-error', 'Cut-off error'), ('expenditure-not-for-project-purposes', 'Expenditure not for project purposes'), ('no-proof-of-payment', 'No proof of payment'), ('no-proof-of-goods-services-received', 'No proof of goods / services received'), ('vat-incorrectly-claimed', 'VAT incorrectly claimed'), ('dsa-rates-exceeded', 'DSA rates exceeded'), ('unreasonable-price', 'Unreasonable price'), - ('bank-interest-not-reported', 'Bank interest not reported'), ('support-costs-incorrectly-calculated', 'Support costs incorrectly calculated'), ('expenditure-claimed-but-activities-not-undertaken', 'Expenditure claimed but activities not undertaken'), ('advance-claimed-as-expenditure', 'Advance claimed as expenditure'), ('commitments-treated-as-expenditure', 'Commitments treated as expenditure'), ('ineligible-salary-costs', 'Ineligible salary costs'), ('ineligible-costs-other', 'Ineligible costs (other)')], max_length=255, verbose_name='Title (Category)')), + ('title', models.CharField(choices=[('no-supporting-documentation', 'No supporting documentation'), ('insufficient-supporting-documentation', 'Insufficient supporting documentation'), ('cut-off-error', 'Cut-off error'), ('expenditure-not-for-project-purposes', 'Expenditure not for project purposes'), ('no-proof-of-payment', 'No proof of payment'), ('no-proof-of-goods-services-received', 'No proof of goods / services received'), ('vat-incorrectly-claimed', 'VAT incorrectly claimed'), ('dsa-rates-exceeded', 'DSA rates exceeded'), ('unreasonable-price', 'Unreasonable price'), ('bank-interest-not-reported', 'Bank interest not reported'), ('support-costs-incorrectly-calculated', 'Support costs incorrectly calculated'), ('expenditure-claimed-but-activities-not-undertaken', 'Expenditure claimed but activities not undertaken'), ('advance-claimed-as-expenditure', 'Advance claimed as expenditure'), ('commitments-treated-as-expenditure', 'Commitments treated as expenditure'), ('ineligible-salary-costs', 'Ineligible salary costs'), ('ineligible-costs-other', 'Ineligible costs (other)')], max_length=255, verbose_name='Title (Category)')), ('local_amount', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount (local)')), ('amount', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount (USD)')), ('description', models.TextField(verbose_name='Description')), @@ -129,174 +93,170 @@ class Migration(migrations.Migration): name='Finding', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('priority', models.CharField(choices=[('high', 'High'), - ('low', 'Low')], max_length=4, verbose_name='Priority')), - ('category_of_observation', models.CharField(choices=[('expenditure_not_for_programme_purposes', 'Expenditure not for programme purposes'), ('expenditure_claimed_but_activities_not_undertaken', 'Expenditure claimed but activities not undertaken'), ('expenditure_exceeds_the_approved_budget_rate_or_amount', 'Expenditure exceeds the approved budget rate or amount'), ('expenditure_not_recorded_in_the_correct_period_or_face_form', 'Expenditure not recorded in the correct period or FACE form'), ('advance_claimed_as_expenditure', 'Advance claimed as expenditure'), ('commitments_treated_as_expenditure', 'Commitments treated as expenditure'), ('signatories_on_face_forms_different_from_ip_agreement', 'Signatories on FACE forms different from those in the IP Agreement'), ('no_supporting_documentation', 'No supporting documentation'), ('insufficient_supporting_documentation', 'Insufficient supporting documentation'), ('no_proof_of_payment', 'No proof of payment'), ('no_proof_of_goods_received', 'No proof of goods / services received'), ('poor_record_keeping', 'Poor record keeping'), ('lack_of_audit_trail', 'Lack of audit trail (FACE forms do not reconcile with IPs and UNICEF\u2019s accounting records)'), ('lack_of_bank_reconciliations', 'Lack of bank reconciliations'), ( - 'lack_of_segregation_of_duties', 'Lack of segregation of duties'), ('vat_incorrectly_claimed', 'VAT incorrectly claimed'), ('ineligible_salary_cost', 'Ineligible salary cost'), ('dsa_rates_exceeded', 'DSA rates exceeded'), ('support_costs_incorrectly_calculated', 'Support costs incorrectly calculated'), ('no_competitive_procedures_for_the_award_of_contracts', 'No competitive procedures for the award of contracts'), ('supplier\u2019s_invoices_not_approved', 'Supplier\u2019s invoices not approved'), ('no_evaluation_of_goods_received', 'No evaluation of goods received'), ('lack_of_procedures_for_verification_of_assets', 'Lack of procedures for verification of assets'), ('goods_/_assets_not_used_for_the_intended_purposes', 'Goods / Assets not used for the intended purposes'), ('lack_of_written_agreement_between_ip_and_sub-contractee', 'Lack of written agreement between IP and sub-contractee'), ('lack_of_sub-contractee_financial', 'Lack of sub-contractee financial / substantive progress reporting on file'), ('failure_to_implement_prior_assurance_activity_recommendations', 'Failure to implement prior assurance activity recommendations'), ('other', 'Other')], max_length=100, verbose_name='Category of Observation')), - ('recommendation', models.TextField(blank=True, verbose_name='Recommendation')), + ('priority', models.CharField(choices=[('high', 'High'), ('low', 'Low')], max_length=4, verbose_name='Priority')), + ('category_of_observation', models.CharField(choices=[('expenditure_not_for_programme_purposes', 'Expenditure not for programme purposes'), ('expenditure_claimed_but_activities_not_undertaken', 'Expenditure claimed but activities not undertaken'), ('expenditure_exceeds_the_approved_budget_rate_or_amount', 'Expenditure exceeds the approved budget rate or amount'), ('expenditure_not_recorded_in_the_correct_period_or_face_form', 'Expenditure not recorded in the correct period or FACE form'), ('advance_claimed_as_expenditure', 'Advance claimed as expenditure'), ('commitments_treated_as_expenditure', 'Commitments treated as expenditure'), ('signatories_on_face_forms_different_from_ip_agreement', 'Signatories on FACE forms different from those in the IP Agreement'), ('no_supporting_documentation', 'No supporting documentation'), ('insufficient_supporting_documentation', 'Insufficient supporting documentation'), ('no_proof_of_payment', 'No proof of payment'), ('no_proof_of_goods_received', 'No proof of goods / services received'), ('poor_record_keeping', 'Poor record keeping'), ('lack_of_audit_trail', 'Lack of audit trail (FACE forms do not reconcile with IPs and UNICEF’s accounting records)'), ('lack_of_bank_reconciliations', 'Lack of bank reconciliations'), ('lack_of_segregation_of_duties', 'Lack of segregation of duties'), ('vat_incorrectly_claimed', 'VAT incorrectly claimed'), ('ineligible_salary_cost', 'Ineligible salary cost'), ('dsa_rates_exceeded', 'DSA rates exceeded'), ('support_costs_incorrectly_calculated', 'Support costs incorrectly calculated'), ('no_competitive_procedures_for_the_award_of_contracts', 'No competitive procedures for the award of contracts'), ('supplier’s_invoices_not_approved', 'Supplier’s invoices not approved'), ('no_evaluation_of_goods_received', 'No evaluation of goods received'), ('lack_of_procedures_for_verification_of_assets', 'Lack of procedures for verification of assets'), ('goods_/_assets_not_used_for_the_intended_purposes', 'Goods / Assets not used for the intended purposes'), ('lack_of_written_agreement_between_ip_and_sub-contractee', 'Lack of written agreement between IP and sub-contractee'), ('lack_of_sub-contractee_financial', 'Lack of sub-contractee financial / substantive progress reporting on file'), ('failure_to_implement_prior_assurance_activity_recommendations', 'Failure to implement prior assurance activity recommendations'), ('other', 'Other')], max_length=100, verbose_name='Category of Observation')), + ('recommendation', models.TextField(blank=True, verbose_name='Finding and Recommendation')), ('agreed_action_by_ip', models.TextField(blank=True, verbose_name='Agreed Action by IP')), ('deadline_of_action', models.DateField(blank=True, null=True, verbose_name='Deadline of Action')), ], - ), - migrations.CreateModel( - name='KeyInternalControl', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('recommendation', models.TextField(blank=True, verbose_name='Recommendation')), - ('audit_observation', models.TextField(blank=True, verbose_name='Audit Observation')), - ('ip_response', models.TextField(blank=True, verbose_name='IP response')), - ], options={ + 'verbose_name': 'Finding', + 'verbose_name_plural': 'Findings', 'ordering': ('id',), }, ), migrations.CreateModel( - name='Risk', + name='KeyInternalControl', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.SmallIntegerField(blank=True, choices=[ - (0, 'N/A'), (1, 'Low'), (2, 'Medium'), (3, 'Significant'), (4, 'High')], null=True, verbose_name='Value')), - ('extra', models.JSONField(blank=True, null=True, verbose_name='Extra')), - ], - ), - migrations.CreateModel( - name='RiskBluePrint', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(db_index=True, editable=False)), - ('weight', models.PositiveSmallIntegerField(default=1, verbose_name='Weight')), - ('is_key', models.BooleanField(default=False, verbose_name='Is Key')), - ('header', models.TextField(verbose_name='Header')), - ('description', models.TextField(blank=True, verbose_name='Description')), + ('recommendation', models.TextField(verbose_name='Recommendation')), + ('audit_observation', models.TextField(verbose_name='Audit Observation')), + ('ip_response', models.TextField(verbose_name='IP response')), ], options={ - 'ordering': ('order',), - 'abstract': False, + 'ordering': ('id',), }, ), migrations.CreateModel( - name='RiskCategory', + name='SpecialAuditRecommendation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(db_index=True, editable=False)), - ('header', models.CharField(max_length=255, verbose_name='Header')), - ('category_type', models.CharField(choices=[ - ('default', 'Default'), ('primary', 'Primary')], default='default', max_length=20, verbose_name='Category Type')), - ('code', models.CharField(blank=True, max_length=20, verbose_name='Code')), - ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='children', to='audit.RiskCategory', verbose_name='Parent')), + ('description', models.TextField()), ], options={ - 'verbose_name_plural': 'Risk Categories', + 'verbose_name': 'Special Audit Recommendation', + 'verbose_name_plural': 'Special Audit Recommendations', + 'ordering': ('id',), }, ), migrations.CreateModel( - name='SpecialAuditRecommendation', + name='SpecificProcedure', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('description', models.TextField()), + ('finding', models.TextField(blank=True)), ], + options={ + 'verbose_name': 'Specific Procedure', + 'verbose_name_plural': 'Specific Procedures', + 'ordering': ('id',), + }, ), migrations.CreateModel( - name='SpecificProcedure', + name='EngagementActionPoint', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('description', models.TextField()), - ('finding', models.TextField(blank=True)), ], + options={ + 'verbose_name': 'Engagement Action Point', + 'verbose_name_plural': 'Engagement Action Points', + 'abstract': False, + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('action_points.actionpoint',), ), migrations.CreateModel( name='Audit', fields=[ - ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, - parent_link=True, primary_key=True, serialize=False, to='audit.Engagement')), - ('audited_expenditure', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Audited Expenditure $')), - ('financial_findings', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Financial Findings $')), - ('audit_opinion', models.CharField(blank=True, choices=[('unqualified', 'Unqualified'), ('qualified', 'Qualified'), ( - 'disclaimer_opinion', 'Disclaimer opinion'), ('adverse_opinion', 'Adverse opinion')], max_length=20, null=True, verbose_name='Audit Opinion')), + ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='audit.engagement')), + ('audited_expenditure', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Audited Expenditure $')), + ('financial_findings', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Financial Findings $')), + ('audited_expenditure_local', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Audited Expenditure Local Currency')), + ('financial_findings_local', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Financial Findings Local Currency')), + ('audit_opinion', models.CharField(blank=True, choices=[('unqualified', 'Unqualified'), ('qualified', 'Qualified'), ('disclaimer_opinion', 'Disclaimer opinion'), ('adverse_opinion', 'Adverse opinion')], default='', max_length=20, verbose_name='Audit Opinion')), ], options={ - 'ordering': ('id',), 'verbose_name': 'Audit', 'verbose_name_plural': 'Audits', + 'ordering': ('id',), }, bases=('audit.engagement',), ), migrations.CreateModel( name='MicroAssessment', fields=[ - ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, - parent_link=True, primary_key=True, serialize=False, to='audit.Engagement')), + ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='audit.engagement')), + ('questionnaire_version', models.PositiveSmallIntegerField(default=2)), ], options={ - 'ordering': ('id',), 'verbose_name': 'Micro Assessment', 'verbose_name_plural': 'Micro Assessments', + 'ordering': ('id',), }, bases=('audit.engagement',), ), migrations.CreateModel( name='SpecialAudit', fields=[ - ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, - parent_link=True, primary_key=True, serialize=False, to='audit.Engagement')), + ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='audit.engagement')), ], options={ - 'ordering': ('id',), - 'abstract': False, 'verbose_name': 'Special Audit', 'verbose_name_plural': 'Special Audits', + 'ordering': ('id',), }, bases=('audit.engagement',), ), migrations.CreateModel( name='SpotCheck', fields=[ - ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, - parent_link=True, primary_key=True, serialize=False, to='audit.Engagement')), - ('total_amount_tested', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Total Amount Tested')), - ('total_amount_of_ineligible_expenditure', models.DecimalField(blank=True, decimal_places=2, - max_digits=20, null=True, verbose_name='Total Amount of Ineligible Expenditure')), + ('engagement_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='audit.engagement')), + ('total_amount_tested', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Total Amount Tested')), + ('total_amount_of_ineligible_expenditure', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Total Amount of Ineligible Expenditure')), ('internal_controls', models.TextField(blank=True, verbose_name='Internal Controls')), ], options={ - 'ordering': ('id',), 'verbose_name': 'Spot Check', 'verbose_name_plural': 'Spot Checks', + 'ordering': ('id',), }, bases=('audit.engagement',), ), - migrations.AddField( - model_name='riskblueprint', - name='category', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='blueprints', to='audit.RiskCategory', verbose_name='Category'), - ), - migrations.AddField( - model_name='risk', - name='blueprint', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='risks', to='audit.RiskBluePrint', verbose_name='Blueprint'), - ), - migrations.AddField( - model_name='risk', - name='engagement', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='risks', to='audit.Engagement', verbose_name='Engagement'), + migrations.CreateModel( + name='RiskCategory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order')), + ('header', models.CharField(max_length=500, verbose_name='Header')), + ('category_type', models.CharField(choices=[('default', 'Default'), ('primary', 'Primary')], default='default', max_length=20, verbose_name='Category Type')), + ('code', models.CharField(blank=True, max_length=20, verbose_name='Code')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='audit.riskcategory', verbose_name='Parent')), + ], + options={ + 'verbose_name_plural': 'Risk Categories', + 'ordering': ('order',), + 'abstract': False, + }, ), - migrations.AddField( - model_name='engagementactionpoint', - name='engagement', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='action_points', to='audit.Engagement', verbose_name='Engagement'), + migrations.CreateModel( + name='RiskBluePrint', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order')), + ('weight', models.PositiveSmallIntegerField(default=1, verbose_name='Weight')), + ('is_key', models.BooleanField(default=False, verbose_name='Is Key')), + ('header', models.TextField(verbose_name='Header')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blueprints', to='audit.riskcategory', verbose_name='Category')), + ], + options={ + 'verbose_name_plural': 'Risk Blueprints', + 'ordering': ('order',), + 'abstract': False, + }, ), - migrations.AddField( - model_name='engagementactionpoint', - name='person_responsible', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='engagement_action_points', - to=settings.AUTH_USER_MODEL, verbose_name='Person Responsible'), + migrations.CreateModel( + name='Risk', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('value', models.SmallIntegerField(blank=True, choices=[(0, 'N/A'), (1, 'Low'), (2, 'Medium'), (3, 'Significant'), (4, 'High')], null=True, verbose_name='Value')), + ('extra', models.JSONField(blank=True, null=True, verbose_name='Extra')), + ('blueprint', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='audit.riskblueprint', verbose_name='Blueprint')), + ('engagement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='audit.engagement', verbose_name='Engagement')), + ], + options={ + 'ordering': ('id',), + }, ), ] diff --git a/src/etools/applications/audit/migrations/0002_auto_20180326_1605.py b/src/etools/applications/audit/migrations/0002_auto_20180326_1605.py deleted file mode 100644 index 9690543158..0000000000 --- a/src/etools/applications/audit/migrations/0002_auto_20180326_1605.py +++ /dev/null @@ -1,96 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('purchase_order', '0001_initial'), - ('audit', '0001_initial'), - ('partners', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='active_pd', - field=models.ManyToManyField(to='partners.Intervention', verbose_name='Active PDs'), - ), - migrations.AddField( - model_name='engagement', - name='agreement', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='purchase_order.PurchaseOrder', verbose_name='Purchase Order'), - ), - migrations.AddField( - model_name='engagement', - name='authorized_officers', - field=models.ManyToManyField(blank=True, related_name='engagement_authorizations', - to='partners.PartnerStaffMember', verbose_name='Authorized Officers'), - ), - migrations.AddField( - model_name='engagement', - name='partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='partners.PartnerOrganization', verbose_name='Partner'), - ), - migrations.AddField( - model_name='engagement', - name='po_item', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='purchase_order.PurchaseOrderItem', verbose_name='PO Item Number'), - ), - migrations.AddField( - model_name='engagement', - name='staff_members', - field=models.ManyToManyField(to='purchase_order.AuditorStaffMember', verbose_name='Staff Members'), - ), - migrations.AlterUniqueTogether( - name='auditpermission', - unique_together=set([('user_type', 'instance_status', 'target', 'permission_type')]), - ), - migrations.AddField( - model_name='specificprocedure', - name='audit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='specific_procedures', to='audit.SpecialAudit', verbose_name='Special Audit'), - ), - migrations.AddField( - model_name='specialauditrecommendation', - name='audit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='other_recommendations', to='audit.SpecialAudit', verbose_name='Special Audit'), - ), - migrations.AlterUniqueTogether( - name='risk', - unique_together=set([('engagement', 'blueprint')]), - ), - migrations.AddField( - model_name='keyinternalcontrol', - name='audit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='key_internal_controls', to='audit.Audit', verbose_name='Audit'), - ), - migrations.AddField( - model_name='finding', - name='spot_check', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='findings', to='audit.SpotCheck', verbose_name='Spot Check'), - ), - migrations.AddField( - model_name='financialfinding', - name='audit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='financial_finding_set', to='audit.Audit', verbose_name='Audit'), - ), - migrations.AddField( - model_name='detailedfindinginfo', - name='micro_assesment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', - to='audit.MicroAssessment', verbose_name='Micro Assessment'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0017_auto_20190501_1858.py b/src/etools/applications/audit/migrations/0002_engagement_active_pd.py similarity index 65% rename from src/etools/applications/audit/migrations/0017_auto_20190501_1858.py rename to src/etools/applications/audit/migrations/0002_engagement_active_pd.py index 9cfafa9301..da9fc25bc1 100644 --- a/src/etools/applications/audit/migrations/0017_auto_20190501_1858.py +++ b/src/etools/applications/audit/migrations/0002_engagement_active_pd.py @@ -1,16 +1,19 @@ -# Generated by Django 2.1.8 on 2019-05-01 18:58 +# Generated by Django 3.2.19 on 2024-07-19 11:57 from django.db import migrations, models class Migration(migrations.Migration): + initial = True + dependencies = [ - ('audit', '0016_auto_20190328_1528'), + ('audit', '0001_initial'), + ('partners', '0001_initial'), ] operations = [ - migrations.AlterField( + migrations.AddField( model_name='engagement', name='active_pd', field=models.ManyToManyField(blank=True, to='partners.Intervention', verbose_name='Active PDs'), diff --git a/src/etools/applications/audit/migrations/0003_engagement_agreement.py b/src/etools/applications/audit/migrations/0003_engagement_agreement.py new file mode 100644 index 0000000000..27d29324fd --- /dev/null +++ b/src/etools/applications/audit/migrations/0003_engagement_agreement.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('audit', '0002_engagement_active_pd'), + ('purchase_order', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='engagement', + name='agreement', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='purchase_order.purchaseorder', verbose_name='Purchase Order'), + ), + ] diff --git a/src/etools/applications/audit/migrations/0003_fix_null_values.py b/src/etools/applications/audit/migrations/0003_fix_null_values.py deleted file mode 100644 index 156f59cd54..0000000000 --- a/src/etools/applications/audit/migrations/0003_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0002_auto_20180326_1605'), - ] - - operations = [ - ] diff --git a/src/etools/applications/audit/migrations/0004_initial.py b/src/etools/applications/audit/migrations/0004_initial.py new file mode 100644 index 0000000000..1fc1daf8ef --- /dev/null +++ b/src/etools/applications/audit/migrations/0004_initial.py @@ -0,0 +1,86 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0001_initial'), + ('purchase_order', '0001_initial'), + ('reports', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('audit', '0003_engagement_agreement'), + ] + + operations = [ + migrations.AddField( + model_name='engagement', + name='authorized_officers', + field=models.ManyToManyField(blank=True, related_name='engagement_authorizations', to=settings.AUTH_USER_MODEL, verbose_name='Authorized Officers'), + ), + migrations.AddField( + model_name='engagement', + name='offices', + field=models.ManyToManyField(blank=True, related_name='engagements', to='reports.Office', verbose_name='Offices'), + ), + migrations.AddField( + model_name='engagement', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='engagement', + name='po_item', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='purchase_order.purchaseorderitem', verbose_name='PO Item Number'), + ), + migrations.AddField( + model_name='engagement', + name='sections', + field=models.ManyToManyField(blank=True, related_name='engagements', to='reports.Section', verbose_name='Sections'), + ), + migrations.AddField( + model_name='engagement', + name='staff_members', + field=models.ManyToManyField(related_name='engagements', to=settings.AUTH_USER_MODEL, verbose_name='Staff Members'), + ), + migrations.AddField( + model_name='engagement', + name='users_notified', + field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Notified When Completed'), + ), + migrations.AddField( + model_name='specificprocedure', + name='audit', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='specific_procedures', to='audit.specialaudit', verbose_name='Special Audit'), + ), + migrations.AddField( + model_name='specialauditrecommendation', + name='audit', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='other_recommendations', to='audit.specialaudit', verbose_name='Special Audit'), + ), + migrations.AddField( + model_name='keyinternalcontrol', + name='audit', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='key_internal_controls', to='audit.audit', verbose_name='Audit'), + ), + migrations.AddField( + model_name='finding', + name='spot_check', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', to='audit.spotcheck', verbose_name='Spot Check'), + ), + migrations.AddField( + model_name='financialfinding', + name='audit', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='financial_finding_set', to='audit.audit', verbose_name='Audit'), + ), + migrations.AddField( + model_name='detailedfindinginfo', + name='micro_assesment', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', to='audit.microassessment', verbose_name='Micro Assessment'), + ), + ] diff --git a/src/etools/applications/audit/migrations/0004_make_not_nullable.py b/src/etools/applications/audit/migrations/0004_make_not_nullable.py deleted file mode 100644 index 7c0fc9d720..0000000000 --- a/src/etools/applications/audit/migrations/0004_make_not_nullable.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0003_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='audit', - name='audit_opinion', - field=models.CharField(blank=True, choices=[('unqualified', 'Unqualified'), ('qualified', 'Qualified'), ( - 'disclaimer_opinion', 'Disclaimer opinion'), ('adverse_opinion', 'Adverse opinion')], default='', max_length=20, verbose_name='Audit Opinion'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0005_auto_20180410_0837.py b/src/etools/applications/audit/migrations/0005_auto_20180410_0837.py deleted file mode 100644 index c4d4a34b14..0000000000 --- a/src/etools/applications/audit/migrations/0005_auto_20180410_0837.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-10 08:37 -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0004_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='exchange_rate', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Exchange Rate'), - ), - migrations.AlterField( - model_name='engagement', - name='shared_ip_with', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ( - 'UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, default=[], size=None, verbose_name='Shared Audit with'), - ), - migrations.AlterField( - model_name='finding', - name='recommendation', - field=models.TextField(blank=True, verbose_name='Finding and Recommendation'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0006_delete_auditpermission.py b/src/etools/applications/audit/migrations/0006_delete_auditpermission.py deleted file mode 100644 index 0f95b86ba8..0000000000 --- a/src/etools/applications/audit/migrations/0006_delete_auditpermission.py +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-10 09:03 -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0005_auto_20180410_0837'), - ] - - operations = [ - migrations.DeleteModel( - name='AuditPermission', - ), - ] diff --git a/src/etools/applications/audit/migrations/0007_auto_20180502_0938.py b/src/etools/applications/audit/migrations/0007_auto_20180502_0938.py deleted file mode 100644 index 210c23cc22..0000000000 --- a/src/etools/applications/audit/migrations/0007_auto_20180502_0938.py +++ /dev/null @@ -1,49 +0,0 @@ -# Generated by Django 1.11 on 2018-05-02 09:38 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0006_delete_auditpermission'), - ] - - operations = [ - migrations.AlterModelOptions( - name='detailedfindinginfo', - options={'ordering': ('id',), 'verbose_name': 'Detailed Finding Info', - 'verbose_name_plural': 'Detailed Findings Info'}, - ), - migrations.AlterModelOptions( - name='engagementactionpoint', - options={'ordering': ('id',), 'verbose_name': 'Engagement Action Point', - 'verbose_name_plural': 'Engagement Action Points'}, - ), - migrations.AlterModelOptions( - name='finding', - options={'ordering': ('id',), 'verbose_name': 'Finding', 'verbose_name_plural': 'Findings'}, - ), - migrations.AlterModelOptions( - name='risk', - options={'ordering': ('id',)}, - ), - migrations.AlterModelOptions( - name='riskblueprint', - options={'ordering': ('order',), 'verbose_name_plural': 'Risk Blueprints'}, - ), - migrations.AlterModelOptions( - name='riskcategory', - options={'ordering': ('order',), 'verbose_name_plural': 'Risk Categories'}, - ), - migrations.AlterModelOptions( - name='specialauditrecommendation', - options={'ordering': ('id',), 'verbose_name': 'Special Audit Recommendation', - 'verbose_name_plural': 'Special Audit Recommendations'}, - ), - migrations.AlterModelOptions( - name='specificprocedure', - options={'ordering': ('id',), 'verbose_name': 'Specific Procedure', - 'verbose_name_plural': 'Specific Procedures'}, - ), - ] diff --git a/src/etools/applications/audit/migrations/0008_auto_20180502_1338.py b/src/etools/applications/audit/migrations/0008_auto_20180502_1338.py deleted file mode 100644 index 62ea5ce3c4..0000000000 --- a/src/etools/applications/audit/migrations/0008_auto_20180502_1338.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 1.11 on 2018-05-02 13:38 -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0007_auto_20180502_0938'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='risk', - unique_together=set([]), - ), - ] diff --git a/src/etools/applications/audit/migrations/0009_auto_20180521_1052.py b/src/etools/applications/audit/migrations/0009_auto_20180521_1052.py deleted file mode 100644 index e7f6811808..0000000000 --- a/src/etools/applications/audit/migrations/0009_auto_20180521_1052.py +++ /dev/null @@ -1,95 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-21 10:52 -from __future__ import unicode_literals - -from django.db import migrations - -# engagement action point, action point -statuses_mapping = { - 'open': 'open', - 'closed': 'completed', -} -reverse_statuses_mapping = dict(zip(statuses_mapping.values(), statuses_mapping.keys())) - - -def migrate_action_points(apps, schema_editor): - ActionPoint = apps.get_model('action_points', 'ActionPoint') - EngagementActionPoint = apps.get_model('audit', 'EngagementActionPoint') - - action_points_to_create = [] - - for action_point in EngagementActionPoint.objects.all(): - new_action_point = ActionPoint( - engagement=action_point.engagement, - partner=action_point.engagement.partner, - description=action_point.description, - due_date=action_point.due_date, - author=action_point.author, - assigned_by=action_point.author, - assigned_to=action_point.person_responsible, - status=statuses_mapping.get(action_point.status, 'open'), - high_priority=action_point.high_priority, - ) - action_points_to_create.append(new_action_point) - - ActionPoint.objects.bulk_create(action_points_to_create) - - -def migrate_action_points_backward(apps, schema_editor): - ActionPoint = apps.get_model('action_points', 'ActionPoint') - EngagementActionPoint = apps.get_model('audit', 'EngagementActionPoint') - - action_points_to_create = [] - - for action_point in ActionPoint.objects.filter(engagement__isnull=False): - new_action_point = EngagementActionPoint( - category="Other", - engagement=action_point.engagement, - description=action_point.description, - due_date=action_point.due_date, - author=action_point.author, - person_responsible=action_point.assigned_to, - status=reverse_statuses_mapping[action_point.status], - high_priority=action_point.high_priority, - ) - action_points_to_create.append(new_action_point) - - EngagementActionPoint.objects.bulk_create(action_points_to_create) - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0004_auto_20180521_1052'), - ('audit', '0008_auto_20180502_1338'), - ] - - operations = [ - migrations.RunPython(migrate_action_points, migrate_action_points_backward), - migrations.RemoveField( - model_name='engagementactionpoint', - name='author', - ), - migrations.RemoveField( - model_name='engagementactionpoint', - name='engagement', - ), - migrations.RemoveField( - model_name='engagementactionpoint', - name='person_responsible', - ), - migrations.DeleteModel( - name='EngagementActionPoint', - ), - migrations.CreateModel( - name='EngagementActionPoint', - fields=[ - ], - options={ - 'verbose_name': 'Engagement Action Point', - 'verbose_name_plural': 'Engagement Action Points', - 'abstract': False, - 'proxy': True, - }, - bases=('action_points.actionpoint',), - ), - ] diff --git a/src/etools/applications/audit/migrations/0010_auto_20180824_1552.py b/src/etools/applications/audit/migrations/0010_auto_20180824_1552.py deleted file mode 100644 index aa3ed573c4..0000000000 --- a/src/etools/applications/audit/migrations/0010_auto_20180824_1552.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-24 15:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -def migrate_nulls_to_zero(apps, schema_editor): - Engagement = apps.get_model('audit', 'Engagement') - Audit = apps.get_model('audit', 'Audit') - SpotCheck = apps.get_model('audit', 'SpotCheck') - - Audit.objects.filter(audited_expenditure__isnull=True).update(audited_expenditure=0) - Audit.objects.filter(financial_findings__isnull=True).update(financial_findings=0) - Engagement.objects.filter(additional_supporting_documentation_provided__isnull=True).update(additional_supporting_documentation_provided=0) - Engagement.objects.filter(amount_refunded__isnull=True).update(amount_refunded=0) - Engagement.objects.filter(justification_provided_and_accepted__isnull=True).update(justification_provided_and_accepted=0) - Engagement.objects.filter(write_off_required__isnull=True).update(write_off_required=0) - Engagement.objects.filter(exchange_rate__isnull=True).update(exchange_rate=0) - Engagement.objects.filter(total_value__isnull=True).update(total_value=0) - SpotCheck.objects.filter(total_amount_of_ineligible_expenditure__isnull=True).update(total_amount_of_ineligible_expenditure=0) - SpotCheck.objects.filter(total_amount_tested__isnull=True).update(total_amount_tested=0) - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0009_auto_20180521_1052'), - ] - - operations = [ - migrations.RunPython(migrate_nulls_to_zero, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/audit/migrations/0011_auto_20180824_2059.py b/src/etools/applications/audit/migrations/0011_auto_20180824_2059.py deleted file mode 100644 index 4f63081512..0000000000 --- a/src/etools/applications/audit/migrations/0011_auto_20180824_2059.py +++ /dev/null @@ -1,64 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-24 20:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0010_auto_20180824_1552'), - ] - - operations = [ - migrations.AlterField( - model_name='audit', - name='audited_expenditure', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Audited Expenditure $'), - ), - migrations.AlterField( - model_name='audit', - name='financial_findings', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Financial Findings $'), - ), - migrations.AlterField( - model_name='engagement', - name='additional_supporting_documentation_provided', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Additional Supporting Documentation Provided'), - ), - migrations.AlterField( - model_name='engagement', - name='amount_refunded', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Amount Refunded'), - ), - migrations.AlterField( - model_name='engagement', - name='exchange_rate', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Exchange Rate'), - ), - migrations.AlterField( - model_name='engagement', - name='justification_provided_and_accepted', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Justification Provided and Accepted'), - ), - migrations.AlterField( - model_name='engagement', - name='total_value', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Total value of selected FACE form(s)'), - ), - migrations.AlterField( - model_name='engagement', - name='write_off_required', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Impairment'), - ), - migrations.AlterField( - model_name='spotcheck', - name='total_amount_of_ineligible_expenditure', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Total Amount of Ineligible Expenditure'), - ), - migrations.AlterField( - model_name='spotcheck', - name='total_amount_tested', - field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=20, verbose_name='Total Amount Tested'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0012_auto_20181229_0249.py b/src/etools/applications/audit/migrations/0012_auto_20181229_0249.py deleted file mode 100644 index f0236d71f9..0000000000 --- a/src/etools/applications/audit/migrations/0012_auto_20181229_0249.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.0.9 on 2018-12-29 02:49 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0011_auto_20180824_2059'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='shared_ip_with', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ('UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, default=list, size=None, verbose_name='Shared Audit with'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0013_auto_20190102_1905.py b/src/etools/applications/audit/migrations/0013_auto_20190102_1905.py deleted file mode 100644 index b105b28f46..0000000000 --- a/src/etools/applications/audit/migrations/0013_auto_20190102_1905.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.4 on 2019-01-02 19:05 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0012_auto_20181229_0249'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='joint_audit', - field=models.BooleanField(blank=True, default=False, verbose_name='Joint Audit'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0014_auto_20190305_2014.py b/src/etools/applications/audit/migrations/0014_auto_20190305_2014.py deleted file mode 100644 index bd8ac49251..0000000000 --- a/src/etools/applications/audit/migrations/0014_auto_20190305_2014.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.1.5 on 2019-03-05 20:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0013_auto_20190102_1905'), - ] - - operations = [ - migrations.AlterField( - model_name='keyinternalcontrol', - name='audit_observation', - field=models.TextField(verbose_name='Audit Observation'), - ), - migrations.AlterField( - model_name='keyinternalcontrol', - name='ip_response', - field=models.TextField(verbose_name='IP response'), - ), - migrations.AlterField( - model_name='keyinternalcontrol', - name='recommendation', - field=models.TextField(verbose_name='Recommendation'), - ), - migrations.AlterField( - model_name='riskblueprint', - name='order', - field=models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order'), - ), - migrations.AlterField( - model_name='riskcategory', - name='order', - field=models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0015_auto_20190312_2010.py b/src/etools/applications/audit/migrations/0015_auto_20190312_2010.py deleted file mode 100644 index 70322ce21b..0000000000 --- a/src/etools/applications/audit/migrations/0015_auto_20190312_2010.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-12 20:10 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0014_auto_20190305_2014'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='po_item', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='purchase_order.PurchaseOrderItem', verbose_name='PO Item Number'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0016_auto_20190328_1528.py b/src/etools/applications/audit/migrations/0016_auto_20190328_1528.py deleted file mode 100644 index e191fc29d7..0000000000 --- a/src/etools/applications/audit/migrations/0016_auto_20190328_1528.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-28 15:28 - -from django.db import migrations - -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0015_auto_20190312_2010'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='status', - field=django_fsm.FSMField(choices=[('partner_contacted', 'IP Contacted'), ('report_submitted', 'Report Submitted'), ('final', 'Final Report'), ('cancelled', 'Cancelled')], default='partner_contacted', max_length=30, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0018_auto_20191008_2235.py b/src/etools/applications/audit/migrations/0018_auto_20191008_2235.py deleted file mode 100644 index bc9bd6ecae..0000000000 --- a/src/etools/applications/audit/migrations/0018_auto_20191008_2235.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 2.2.6 on 2019-10-08 22:35 - -from django.db import migrations, models - -from etools.libraries.djangolib.fields import CurrencyField - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0017_auto_20190501_1858'), - ] - - operations = [ - migrations.AddField( - model_name='audit', - name='audited_expenditure_local', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Audited Expenditure Local Currency'), - ), - migrations.AddField( - model_name='audit', - name='financial_findings_local', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Financial Findings Local Currency'), - ), - migrations.AddField( - model_name='engagement', - name='currency_of_report', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=4, null=True, verbose_name='Currency of Report'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0019_engagement_users_notified.py b/src/etools/applications/audit/migrations/0019_engagement_users_notified.py deleted file mode 100644 index 4c5a58e645..0000000000 --- a/src/etools/applications/audit/migrations/0019_engagement_users_notified.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-06 22:04 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0012_auto_20190513_1804'), - ('audit', '0018_auto_20191008_2235'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='users_notified', - field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Notified When Completed'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0020_auto_20191125_2045.py b/src/etools/applications/audit/migrations/0020_auto_20191125_2045.py deleted file mode 100644 index e464d5fc36..0000000000 --- a/src/etools/applications/audit/migrations/0020_auto_20191125_2045.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-25 20:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0024_auto_20191122_1559'), - ('audit', '0019_engagement_users_notified'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='offices', - field=models.ManyToManyField(blank=True, related_name='engagements', to='reports.Office', verbose_name='Offices'), - ), - migrations.AddField( - model_name='engagement', - name='sections', - field=models.ManyToManyField(blank=True, related_name='engagements', to='reports.Section', verbose_name='Sections'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0021_auto_20200729_2123.py b/src/etools/applications/audit/migrations/0021_auto_20200729_2123.py deleted file mode 100644 index 5af1757afb..0000000000 --- a/src/etools/applications/audit/migrations/0021_auto_20200729_2123.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-29 21:23 - -from django.db import migrations - -from etools.libraries.djangolib.fields import CurrencyField - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0020_auto_20191125_2045'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='currency_of_report', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=5, null=True, verbose_name='Currency of Report'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0022_engagement_reference_number.py b/src/etools/applications/audit/migrations/0022_engagement_reference_number.py deleted file mode 100644 index a3f067cd54..0000000000 --- a/src/etools/applications/audit/migrations/0022_engagement_reference_number.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 2.2.3 on 2019-08-14 12:17 - -from django.db import connection, migrations, models - - -def set_reference_number(apps, schema_editor): - Country = apps.get_model("users", "country") - Engagement = apps.get_model("audit", "engagement") - country = Country.objects.get( - schema_name=connection.tenant.schema_name, - ) - for engagement in Engagement.objects.all(): - if engagement.engagement_type == 'audit': - engagement_code = 'a' - else: - engagement_code = engagement.engagement_type - engagement.reference_number = '{}/{}/{}/{}/{}'.format( - country.country_short_code, - engagement.partner.name[:5], - engagement_code.upper(), - engagement.created.year, - engagement.pk - ) - engagement.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0021_auto_20200729_2123'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='reference_number', - field=models.CharField(max_length=100, null=True, verbose_name='Reference Number'), - ), - migrations.RunPython(set_reference_number, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/audit/migrations/0023_auto_20220415_1130.py b/src/etools/applications/audit/migrations/0023_auto_20220415_1130.py deleted file mode 100644 index 90f82784b1..0000000000 --- a/src/etools/applications/audit/migrations/0023_auto_20220415_1130.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-15 11:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0022_engagement_reference_number'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='exchange_rate', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Exchange Rate'), - ), - migrations.AlterField( - model_name='engagement', - name='total_value', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total value of selected FACE form(s)'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0024_audit_year_of_audit.py b/src/etools/applications/audit/migrations/0024_audit_year_of_audit.py deleted file mode 100644 index 8a22ed994d..0000000000 --- a/src/etools/applications/audit/migrations/0024_audit_year_of_audit.py +++ /dev/null @@ -1,51 +0,0 @@ -# Generated by Django 3.2.6 on 2023-04-14 07:53 - -from django.db import migrations, models -from django.db.models import F, Subquery, OuterRef -from django.db.models.functions import Extract -from django.utils import timezone - -import etools.applications.audit.models - - -def fill_year_of_audit(apps, schema_editor): - Engagement = apps.get_model('audit', 'Engagement') - Engagement.objects.filter( - engagement_type='audit', - date_of_draft_report_to_ip__isnull=False, - ).update( - year_of_audit=Subquery( - Engagement.objects.filter( - pk=OuterRef('pk') - ).annotate( - end_year=Extract("date_of_draft_report_to_ip", "year") - ).values('end_year')[:1] - ) - ) - Engagement.objects.filter( - engagement_type='audit', - date_of_draft_report_to_ip__isnull=True, - ).update( - year_of_audit=timezone.now().year, - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0023_auto_20220415_1130'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='year_of_audit', - field=models.PositiveSmallIntegerField(default=1, null=True), - ), - migrations.RunPython(fill_year_of_audit, migrations.RunPython.noop), - migrations.AlterField( - model_name='engagement', - name='year_of_audit', - field=models.PositiveSmallIntegerField(default=etools.applications.audit.models.get_current_year, null=True), - ), - ] diff --git a/src/etools/applications/audit/migrations/0025_alter_engagement_year_of_audit.py b/src/etools/applications/audit/migrations/0025_alter_engagement_year_of_audit.py deleted file mode 100644 index 00d4af99bd..0000000000 --- a/src/etools/applications/audit/migrations/0025_alter_engagement_year_of_audit.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2023-04-17 09:36 - -from django.db import migrations, models -import etools.applications.audit.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0024_audit_year_of_audit'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='year_of_audit', - field=models.PositiveSmallIntegerField(db_index=True, default=etools.applications.audit.models.get_current_year, null=True), - ), - ] diff --git a/src/etools/applications/audit/migrations/0026_alter_engagement_staff_members.py b/src/etools/applications/audit/migrations/0026_alter_engagement_staff_members.py deleted file mode 100644 index 204d7201a7..0000000000 --- a/src/etools/applications/audit/migrations/0026_alter_engagement_staff_members.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-17 06:43 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('audit', '0025_alter_engagement_year_of_audit'), - ] - - operations = [ - migrations.RenameField( - model_name='engagement', - old_name='staff_members', - new_name='old_staff_members', - ), - migrations.RenameField( - model_name='engagement', - old_name='authorized_officers', - new_name='old_authorized_officers', - ), - ] diff --git a/src/etools/applications/audit/migrations/0027_engagement_staff_members.py b/src/etools/applications/audit/migrations/0027_engagement_staff_members.py deleted file mode 100644 index 1186a192d8..0000000000 --- a/src/etools/applications/audit/migrations/0027_engagement_staff_members.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-17 06:43 - -from django.conf import settings -from django.db import migrations, models, connection - - -def migrate_engagement_staff_members_to_users(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - Engagement = apps.get_model('audit', 'Engagement') - - for e in Engagement.objects.all(): - e.staff_members.add(*[staff_member.user for staff_member in e.old_staff_members.all().select_related('user') if staff_member.user]) - - -def migrate_engagement_authorized_officers_to_users(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - Engagement = apps.get_model('audit', 'Engagement') - - for e in Engagement.objects.all(): - e.authorized_officers.add(*[staff_member.user for staff_member in e.old_authorized_officers.all().select_related('user') if staff_member.user]) - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0021_migrate_to_realms'), - ('purchase_order', '0012_alter_auditorstaffmember_auditor_firm'), - ('audit', '0026_alter_engagement_staff_members'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='staff_members', - field=models.ManyToManyField(related_name='engagements', to=settings.AUTH_USER_MODEL, verbose_name='Staff Members'), - ), - migrations.AddField( - model_name='engagement', - name='authorized_officers', - field=models.ManyToManyField(related_name='engagement_authorizations', to=settings.AUTH_USER_MODEL, verbose_name='Authorized Officers', blank=True), - ), - migrations.RunPython(migrate_engagement_staff_members_to_users, migrations.RunPython.noop), - migrations.RunPython(migrate_engagement_authorized_officers_to_users, migrations.RunPython.noop), - migrations.RemoveField( - model_name='engagement', - name='old_staff_members', - ), - migrations.RemoveField( - model_name='engagement', - name='old_authorized_officers', - ), - ] diff --git a/src/etools/applications/audit/migrations/0028_audit_year_of_audit_recalculate.py b/src/etools/applications/audit/migrations/0028_audit_year_of_audit_recalculate.py deleted file mode 100644 index e8d46a8ec8..0000000000 --- a/src/etools/applications/audit/migrations/0028_audit_year_of_audit_recalculate.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 3.2.6 on 2023-04-14 07:53 - -from django.db import migrations, models -from django.db.models import F, Subquery, OuterRef -from django.db.models.functions import Extract -from django.utils import timezone - -import etools.applications.audit.models - - -def fill_year_of_audit_for_special_audit(apps, schema_editor): - Engagement = apps.get_model('audit', 'Engagement') - Engagement.objects.filter( - engagement_type='sa', - date_of_draft_report_to_ip__isnull=False, - ).update( - year_of_audit=Subquery( - Engagement.objects.filter( - pk=OuterRef('pk') - ).annotate( - end_year=Extract("date_of_draft_report_to_ip", "year") - ).values('end_year')[:1] - ) - ) - Engagement.objects.filter( - engagement_type='sa', - date_of_draft_report_to_ip__isnull=True, - ).update( - year_of_audit=timezone.now().year, - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0027_engagement_staff_members'), - ] - - operations = [ - migrations.RunPython(fill_year_of_audit_for_special_audit, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/audit/migrations/0028_auto_20230515_0551.py b/src/etools/applications/audit/migrations/0028_auto_20230515_0551.py deleted file mode 100644 index e3d384760e..0000000000 --- a/src/etools/applications/audit/migrations/0028_auto_20230515_0551.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.6 on 2023-05-15 05:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0027_engagement_staff_members'), - ] - - operations = [ - migrations.AddField( - model_name='microassessment', - name='questionnaire_version', - field=models.PositiveSmallIntegerField(default=1), - ), - migrations.AlterField( - model_name='microassessment', - name='questionnaire_version', - field=models.PositiveSmallIntegerField(default=2), - ), - migrations.AlterField( - model_name='riskcategory', - name='header', - field=models.CharField(max_length=500, verbose_name='Header'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0029_merge_20230523_1049.py b/src/etools/applications/audit/migrations/0029_merge_20230523_1049.py deleted file mode 100644 index f7a9228f4e..0000000000 --- a/src/etools/applications/audit/migrations/0029_merge_20230523_1049.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2023-05-23 10:49 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0028_audit_year_of_audit_recalculate'), - ('audit', '0028_auto_20230515_0551'), - ] - - operations = [ - ] diff --git a/src/etools/applications/audit/migrations/0030_engagement_send_back_comment.py b/src/etools/applications/audit/migrations/0030_engagement_send_back_comment.py deleted file mode 100644 index c753ac2c2b..0000000000 --- a/src/etools/applications/audit/migrations/0030_engagement_send_back_comment.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2024-01-03 16:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0029_merge_20230523_1049'), - ] - - operations = [ - migrations.AddField( - model_name='engagement', - name='send_back_comment', - field=models.TextField(blank=True, verbose_name='Send Back Comment'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0031_auto_20240507_1059.py b/src/etools/applications/audit/migrations/0031_auto_20240507_1059.py deleted file mode 100644 index 5131816108..0000000000 --- a/src/etools/applications/audit/migrations/0031_auto_20240507_1059.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2024-05-07 10:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0030_engagement_send_back_comment'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='end_date', - field=models.DateField(blank=True, null=True, verbose_name='Start date of first reporting FACE'), - ), - migrations.AlterField( - model_name='engagement', - name='start_date', - field=models.DateField(blank=True, null=True, verbose_name='End date of last reporting FACE'), - ), - ] diff --git a/src/etools/applications/audit/migrations/0032_auto_20240613_1204.py b/src/etools/applications/audit/migrations/0032_auto_20240613_1204.py deleted file mode 100644 index 4a5a96e58d..0000000000 --- a/src/etools/applications/audit/migrations/0032_auto_20240613_1204.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2024-06-13 12:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('audit', '0031_auto_20240507_1059'), - ] - - operations = [ - migrations.AlterField( - model_name='engagement', - name='end_date', - field=models.DateField(blank=True, null=True, verbose_name='End date of last reporting FACE'), - ), - migrations.AlterField( - model_name='engagement', - name='start_date', - field=models.DateField(blank=True, null=True, verbose_name='Start date of first reporting FACE'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0001_initial.py b/src/etools/applications/audit/purchase_order/migrations/0001_initial.py index d179031465..0c3513bc08 100644 --- a/src/etools/applications/audit/purchase_order/migrations/0001_initial.py +++ b/src/etools/applications/audit/purchase_order/migrations/0001_initial.py @@ -1,10 +1,10 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 +import django.contrib.postgres.fields +from django.db import migrations, models import django.db.models.deletion import django.utils.timezone -from django.conf import settings -from django.db import migrations, models - +import etools.libraries.tenant_support.models import model_utils.fields @@ -13,7 +13,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -21,61 +20,38 @@ class Migration(migrations.Migration): name='AuditorFirm', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('vendor_number', models.CharField(blank=True, max_length=30, - null=True, unique=True, verbose_name='Vendor Number')), - ('name', models.CharField(max_length=255, verbose_name='Vendor Name')), - ('street_address', models.CharField(blank=True, max_length=500, null=True, verbose_name='Address')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('postal_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Postal Code')), - ('country', models.CharField(blank=True, max_length=255, null=True, verbose_name='Country')), - ('email', models.CharField(blank=True, max_length=255, null=True, verbose_name='Email')), - ('phone_number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone Number')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('street_address', models.CharField(blank=True, default='', max_length=500, verbose_name='Address')), + ('city', models.CharField(blank=True, default='', max_length=255, verbose_name='City')), + ('postal_code', models.CharField(blank=True, default='', max_length=32, verbose_name='Postal Code')), + ('country', models.CharField(blank=True, default='', max_length=255, verbose_name='Country')), + ('email', models.CharField(blank=True, default='', max_length=255, verbose_name='Email')), + ('phone_number', models.CharField(blank=True, default='', max_length=32, verbose_name='Phone Number')), ('vision_synced', models.BooleanField(default=False, verbose_name='Synced from VISION')), ('blocked', models.BooleanField(default=False, verbose_name='Blocked in VISION')), ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), ('deleted_flag', models.BooleanField(default=False, verbose_name='Marked For Deletion in VISION')), + ('unicef_users_allowed', models.BooleanField(default=False, editable=False, help_text='Allow UNICEF users to join and act as auditors.', verbose_name='UNICEF users allowed')), ], options={ - 'abstract': False, - 'ordering': ('id',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations', - }, - ), - migrations.CreateModel( - name='AuditorStaffMember', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('auditor_firm', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='staff_members', to='purchase_order.AuditorFirm', verbose_name='Auditor')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='purchase_order_auditorstaffmember', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - options={ + 'ordering': ('organization__name',), 'abstract': False, - 'ordering': ('id',), - 'verbose_name': 'Staff Member', - 'verbose_name_plural': 'Staff Members', + 'base_manager_name': 'objects', }, ), migrations.CreateModel( name='PurchaseOrder', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('order_number', models.CharField(blank=True, max_length=30, - null=True, unique=True, verbose_name='Purchase Order Number')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('order_number', models.CharField(blank=True, max_length=30, null=True, unique=True, verbose_name='Purchase Order Number')), ('contract_start_date', models.DateField(blank=True, null=True, verbose_name='PO Date')), ('contract_end_date', models.DateField(blank=True, null=True, verbose_name='Contract Expiry Date')), - ('auditor_firm', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='purchase_orders', to='purchase_order.AuditorFirm', verbose_name='Auditor')), + ('auditor_firm', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='purchase_orders', to='purchase_order.auditorfirm', verbose_name='Auditor')), ], options={ 'abstract': False, @@ -86,12 +62,25 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('number', models.IntegerField(verbose_name='PO Item Number')), - ('purchase_order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='items', to='purchase_order.PurchaseOrder', verbose_name='Purchase Order')), + ('purchase_order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='purchase_order.purchaseorder', verbose_name='Purchase Order')), ], ), - migrations.AlterUniqueTogether( - name='purchaseorderitem', - unique_together=set([('purchase_order', 'number')]), + migrations.CreateModel( + name='AuditorStaffMember', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('history', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128, verbose_name='History'), blank=True, default=list, size=None)), + ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), + ('auditor_firm', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='old_staff_members', to='purchase_order.auditorfirm', verbose_name='Auditor')), + ], + options={ + 'verbose_name': 'Staff Member', + 'verbose_name_plural': 'Staff Members', + 'ordering': ('id',), + 'abstract': False, + }, + bases=(etools.libraries.tenant_support.models.ModelHavingTenantRelationsMixin, models.Model), ), ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0002_fix_null_values.py b/src/etools/applications/audit/purchase_order/migrations/0002_fix_null_values.py deleted file mode 100644 index 41fc75608e..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0002_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0001_initial'), - ] - - operations = [ - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0002_initial.py b/src/etools/applications/audit/purchase_order/migrations/0002_initial.py new file mode 100644 index 0000000000..0a41c0e6e3 --- /dev/null +++ b/src/etools/applications/audit/purchase_order/migrations/0002_initial.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('purchase_order', '0001_initial'), + ('organizations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='auditorstaffmember', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='purchase_order_auditorstaffmember', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='auditorfirm', + name='organization', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), + ), + migrations.AlterUniqueTogether( + name='purchaseorderitem', + unique_together={('purchase_order', 'number')}, + ), + ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0003_make_not_nullable.py b/src/etools/applications/audit/purchase_order/migrations/0003_make_not_nullable.py deleted file mode 100644 index 1f1110675d..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0003_make_not_nullable.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 1.10.8 on 2018-02-28 19:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0002_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='auditorfirm', - name='city', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='City'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='country', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Country'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='email', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Email'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='phone_number', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='postal_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Postal Code'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='street_address', - field=models.CharField(blank=True, default='', max_length=500, verbose_name='Address'), - ), - migrations.AlterField( - model_name='auditorfirm', - name='vendor_number', - field=models.CharField(blank=True, default='', max_length=30, unique=True, verbose_name='Vendor Number'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0004_auditorfirm_unicef_allowed.py b/src/etools/applications/audit/purchase_order/migrations/0004_auditorfirm_unicef_allowed.py deleted file mode 100644 index 3825c05c68..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0004_auditorfirm_unicef_allowed.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-19 12:42 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0003_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='auditorfirm', - name='unicef_users_allowed', - field=models.BooleanField( - default=False, help_text='Allow UNICEF users to join and act as auditors.', verbose_name='UNICEF users allowed'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0005_auditorstaffmember_hidden.py b/src/etools/applications/audit/purchase_order/migrations/0005_auditorstaffmember_hidden.py deleted file mode 100644 index 408d085ade..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0005_auditorstaffmember_hidden.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-06-14 10:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0004_auditorfirm_unicef_allowed'), - ] - - operations = [ - migrations.AddField( - model_name='auditorstaffmember', - name='hidden', - field=models.BooleanField(default=False, verbose_name='Hidden'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0006_auto_20180730_1121.py b/src/etools/applications/audit/purchase_order/migrations/0006_auto_20180730_1121.py deleted file mode 100644 index 8f1c19d91b..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0006_auto_20180730_1121.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-30 11:21 -from __future__ import unicode_literals - -from django.db import migrations, models - - -def update_unicef_allowed(apps, schema_editor): - AuditorFirm = apps.get_model('purchase_order', 'AuditorFirm') - AuditorFirm.objects.exclude(purchase_orders__order_number='0000000000').update(unicef_users_allowed=False) - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0005_auditorstaffmember_hidden'), - ] - - operations = [ - migrations.RunPython( - update_unicef_allowed, migrations.RunPython.noop - ), - migrations.AlterField( - model_name='auditorfirm', - name='unicef_users_allowed', - field=models.BooleanField(default=False, editable=False, help_text='Allow UNICEF users to join and act as auditors.', verbose_name='UNICEF users allowed'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0007_auto_20190625_1437.py b/src/etools/applications/audit/purchase_order/migrations/0007_auto_20190625_1437.py deleted file mode 100644 index 20c00daf1f..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0007_auto_20190625_1437.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.2 on 2019-06-25 14:37 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0006_auto_20180730_1121'), - ] - - operations = [ - migrations.AlterModelOptions( - name='auditorfirm', - options={'ordering': ('name',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations'}, - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0008_auto_20210415_1546.py b/src/etools/applications/audit/purchase_order/migrations/0008_auto_20210415_1546.py deleted file mode 100644 index 5f4d632610..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0008_auto_20210415_1546.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 2.2.20 on 2021-04-15 15:46 - -import django.contrib.postgres.fields -from django.db import migrations, models -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0007_auto_20190625_1437'), - ] - - operations = [ - migrations.AddField( - model_name='auditorstaffmember', - name='created', - field=model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created'), - ), - migrations.AddField( - model_name='auditorstaffmember', - name='history', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=50, verbose_name='History'), blank=True, default=list, size=None), - ), - migrations.AddField( - model_name='auditorstaffmember', - name='modified', - field=model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified'), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0009_auto_20210421_1745.py b/src/etools/applications/audit/purchase_order/migrations/0009_auto_20210421_1745.py deleted file mode 100644 index 5eb427b1f0..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0009_auto_20210421_1745.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.20 on 2021-04-21 17:45 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0008_auto_20210415_1546'), - ] - - operations = [ - migrations.AlterField( - model_name='auditorstaffmember', - name='history', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128, verbose_name='History'), blank=True, default=list, size=None), - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0010_auditorfirm_organization.py b/src/etools/applications/audit/purchase_order/migrations/0010_auditorfirm_organization.py deleted file mode 100644 index bb8f4d25ed..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0010_auditorfirm_organization.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-09 17:16 -import logging - -from django.db import migrations, models, transaction -import django.db.models.deletion - - -def migrate_auditor_firms_to_organizations(apps, schema_editor): - Organization = apps.get_model('organizations', 'Organization') - AuditorFirm = apps.get_model('purchase_order', 'AuditorFirm') - - with transaction.atomic(): - for auditor_firm in AuditorFirm.objects.all(): - if not auditor_firm.vendor_number: - logging.info(f"No vendor_number set for AuditorFirm " - f"{auditor_firm.name} id: {auditor_firm.pk}. Skipping..") - continue - organization, _ = Organization.objects.get_or_create( - vendor_number=auditor_firm.vendor_number, - defaults={ - 'name': auditor_firm.name, - }) - auditor_firm.organization = organization - auditor_firm.save(update_fields=['organization']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('purchase_order', '0009_auto_20210421_1745'), - ] - - operations = [ - migrations.AddField( - model_name='auditorfirm', - name='organization', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), - ), - migrations.AlterModelOptions( - name='auditorfirm', - options={'base_manager_name': 'objects', 'ordering': ('organization__name',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations'}, - ), - migrations.RunPython(migrate_auditor_firms_to_organizations, migrations.RunPython.noop), - migrations.RemoveField( - model_name='auditorfirm', - name='name', - ), - migrations.RemoveField( - model_name='auditorfirm', - name='vendor_number', - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0011_alter_auditorfirm_organization.py b/src/etools/applications/audit/purchase_order/migrations/0011_alter_auditorfirm_organization.py deleted file mode 100644 index 5b3557c144..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0011_alter_auditorfirm_organization.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-10-13 12:41 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('purchase_order', '0010_auditorfirm_organization'), - ] - - operations = [ - migrations.AlterField( - model_name='auditorfirm', - name='organization', - field=models.OneToOneField(default=4, on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/audit/purchase_order/migrations/0012_alter_auditorstaffmember_auditor_firm.py b/src/etools/applications/audit/purchase_order/migrations/0012_alter_auditorstaffmember_auditor_firm.py deleted file mode 100644 index 56f63810d7..0000000000 --- a/src/etools/applications/audit/purchase_order/migrations/0012_alter_auditorstaffmember_auditor_firm.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-17 06:43 - -from django.db import migrations, models, connection, IntegrityError -import django.db.models.deletion - - -def migrate_audit_staff_members_to_realms(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - Realm = apps.get_model('users', 'Realm') - Group = apps.get_model('auth', 'Group') - AuditorFirm = apps.get_model('purchase_order', 'AuditorFirm') - Country = apps.get_model("users", "country") - country = Country.objects.get(schema_name=connection.tenant.schema_name) - - auditor_group = Group.objects.get_or_create(name='Auditor')[0] - - for firm in AuditorFirm.objects.all(): - for staff_member in firm.staff_members.all(): - try: - Realm.objects.create( - user=staff_member.user, - country=country, - organization=firm.organization, - group=auditor_group, - ) - except IntegrityError: - # all good, realm already exists - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0011_alter_auditorfirm_organization'), - ('users', '0021_migrate_to_realms'), - ('auth', '0008_alter_user_username_max_length'), - ] - - operations = [ - migrations.RunPython(migrate_audit_staff_members_to_realms, migrations.RunPython.noop), - migrations.AlterField( - model_name='auditorstaffmember', - name='auditor_firm', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='old_staff_members', to='purchase_order.auditorfirm', verbose_name='Auditor'), - ), - ] diff --git a/src/etools/applications/comments/migrations/0001_initial.py b/src/etools/applications/comments/migrations/0001_initial.py index e21cbe6ee8..b3ae82aca7 100644 --- a/src/etools/applications/comments/migrations/0001_initial.py +++ b/src/etools/applications/comments/migrations/0001_initial.py @@ -1,6 +1,5 @@ -# Generated by Django 2.2.7 on 2020-07-16 11:31 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone @@ -12,7 +11,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('contenttypes', '0002_remove_content_type_name'), ] @@ -28,10 +26,8 @@ class Migration(migrations.Migration): ('related_to_description', models.TextField(blank=True)), ('related_to', models.CharField(max_length=100)), ('text', models.TextField()), - ('instance_related_ct', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Content Type')), - ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='comments.Comment')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='comments', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ('users_related', models.ManyToManyField(blank=True, related_name='mentions', to=settings.AUTH_USER_MODEL)), + ('instance_related_ct', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name='Content Type')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='comments.comment')), ], options={ 'verbose_name': 'Comment', diff --git a/src/etools/applications/comments/migrations/0002_initial.py b/src/etools/applications/comments/migrations/0002_initial.py new file mode 100644 index 0000000000..9e52e2931d --- /dev/null +++ b/src/etools/applications/comments/migrations/0002_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('comments', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='comment', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='comments', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='comment', + name='users_related', + field=models.ManyToManyField(blank=True, related_name='mentions', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/etools/applications/core/data/groups.json b/src/etools/applications/core/data/groups.json index 542f6723de..f185d3bb1a 100644 --- a/src/etools/applications/core/data/groups.json +++ b/src/etools/applications/core/data/groups.json @@ -41,6 +41,13 @@ "permissions": [] } }, + { + "model": "auth.group", + "fields": { + "name": "PRC Secretary", + "permissions": [] + } + }, { "model": "auth.group", "fields": { diff --git a/src/etools/applications/core/migrations/0001_initial.py b/src/etools/applications/core/migrations/0001_initial.py index fd5a882d13..4af91eab17 100644 --- a/src/etools/applications/core/migrations/0001_initial.py +++ b/src/etools/applications/core/migrations/0001_initial.py @@ -1,6 +1,5 @@ -# Generated by Django 2.0.9 on 2018-10-16 10:47 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models @@ -9,7 +8,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('users', '0005_user_middle_name'), ] operations = [ @@ -18,8 +16,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('domain', models.CharField(db_index=True, max_length=253, unique=True)), - ('is_primary', models.BooleanField(default=True)), - ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='domains', to='users.Country')), + ('is_primary', models.BooleanField(db_index=True, default=True)), ], options={ 'abstract': False, diff --git a/src/etools/applications/core/migrations/0002_auto_20190312_1437.py b/src/etools/applications/core/migrations/0002_auto_20190312_1437.py deleted file mode 100644 index a5be7bf064..0000000000 --- a/src/etools/applications/core/migrations/0002_auto_20190312_1437.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-12 14:37 - -from django.db import connection, migrations - - -def rename_table(apps, schema_editor): - - if 'EquiTrack_domain' in connection.introspection.table_names(): - print('Rename') - with connection.cursor() as cursor: - cursor.execute('ALTER TABLE "EquiTrack_domain" RENAME TO "core_domain";') - - -def undo_rename_table(apps, schema_editor): - if 'core_domain' in connection.introspection.table_names(): - print('Undo Rename') - with connection.cursor() as cursor: - cursor.execute('ALTER TABLE "core_domain" RENAME TO "EquiTrack_domain";') - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.RunPython(rename_table, undo_rename_table), - ] diff --git a/src/etools/applications/core/migrations/0002_domain_tenant.py b/src/etools/applications/core/migrations/0002_domain_tenant.py new file mode 100644 index 0000000000..67ba2145e5 --- /dev/null +++ b/src/etools/applications/core/migrations/0002_domain_tenant.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('core', '0001_initial'), + ('users', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='domain', + name='tenant', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='domains', to='users.country'), + ), + ] diff --git a/src/etools/applications/core/migrations/0003_auto_20190424_1448.py b/src/etools/applications/core/migrations/0003_auto_20190424_1448.py deleted file mode 100644 index a198600221..0000000000 --- a/src/etools/applications/core/migrations/0003_auto_20190424_1448.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.8 on 2019-04-24 14:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_auto_20190312_1437'), - ] - - operations = [ - migrations.AlterField( - model_name='domain', - name='is_primary', - field=models.BooleanField(db_index=True, default=True), - ), - ] diff --git a/src/etools/applications/environment/migrations/0001_initial.py b/src/etools/applications/environment/migrations/0001_initial.py index 1abecaa2f2..90c5bfff4d 100644 --- a/src/etools/applications/environment/migrations/0001_initial.py +++ b/src/etools/applications/environment/migrations/0001_initial.py @@ -1,8 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.utils.timezone -from django.conf import settings from django.db import migrations, models +import django.utils.timezone class Migration(migrations.Migration): @@ -10,51 +9,25 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('auth', '0008_alter_user_username_max_length'), - ('users', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ - migrations.CreateModel( - name='IssueCheckConfig', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('check_id', models.CharField(db_index=True, max_length=100, unique=True, verbose_name='Check id')), - ('is_active', models.BooleanField(default=False, verbose_name='Is Active')), - ], - ), migrations.CreateModel( name='TenantFlag', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='The human/computer readable name.', - max_length=100, unique=True, verbose_name='Name')), - ('everyone', models.BooleanField(blank=True, null=True, - help_text='Flip this flag on (Yes) or off (No) for everyone, overriding all other settings. Leave as Unknown to use normally.', verbose_name='Everyone')), - ('percent', models.DecimalField(blank=True, decimal_places=1, - help_text='A number between 0.0 and 99.9 to indicate a percentage of users for whom this flag will be active.', max_digits=3, null=True, verbose_name='Percent')), - ('testing', models.BooleanField(default=False, - help_text='Allow this flag to be set for a session for user testing.', verbose_name='Testing')), - ('superusers', models.BooleanField(default=True, - help_text='Flag always active for superusers?', verbose_name='Superusers')), + ('name', models.CharField(help_text='The human/computer readable name.', max_length=100, unique=True, verbose_name='Name')), + ('everyone', models.BooleanField(blank=True, help_text='Flip this flag on (Yes) or off (No) for everyone, overriding all other settings. Leave as Unknown to use normally.', null=True, verbose_name='Everyone')), + ('percent', models.DecimalField(blank=True, decimal_places=1, help_text='A number between 0.0 and 99.9 to indicate a percentage of users for whom this flag will be active.', max_digits=3, null=True, verbose_name='Percent')), + ('testing', models.BooleanField(default=False, help_text='Allow this flag to be set for a session for user testing.', verbose_name='Testing')), + ('superusers', models.BooleanField(default=True, help_text='Flag always active for superusers?', verbose_name='Superusers')), ('staff', models.BooleanField(default=False, help_text='Flag always active for staff?', verbose_name='Staff')), - ('authenticated', models.BooleanField(default=False, - help_text='Flag always active for authenticate users?', verbose_name='Authenticated')), - ('languages', models.TextField(blank=True, default='', - help_text='Activate this flag for users with one of these languages (comma separated list)', verbose_name='Languages')), + ('authenticated', models.BooleanField(default=False, help_text='Flag always active for authenticate users?', verbose_name='Authenticated')), + ('languages', models.TextField(blank=True, default='', help_text='Activate this flag for users with one of these languages (comma separated list)', verbose_name='Languages')), ('rollout', models.BooleanField(default=False, help_text='Activate roll-out mode?', verbose_name='Rollout')), ('note', models.TextField(blank=True, help_text='Note where this Flag is used.', verbose_name='Note')), - ('created', models.DateTimeField(db_index=True, default=django.utils.timezone.now, - help_text='Date when this Flag was created.', verbose_name='Created')), - ('modified', models.DateTimeField(default=django.utils.timezone.now, - help_text='Date when this Flag was last modified.', verbose_name='Modified')), - ('countries', models.ManyToManyField(blank=True, - help_text='Activate this flag for these countries.', to='users.Country', verbose_name='Countries')), - ('groups', models.ManyToManyField(blank=True, - help_text='Activate this flag for these user groups.', to='auth.Group', verbose_name='Users')), - ('users', models.ManyToManyField(blank=True, help_text='Activate this flag for these users.', - to=settings.AUTH_USER_MODEL, verbose_name='Users')), + ('created', models.DateTimeField(db_index=True, default=django.utils.timezone.now, help_text='Date when this Flag was created.', verbose_name='Created')), + ('modified', models.DateTimeField(default=django.utils.timezone.now, help_text='Date when this Flag was last modified.', verbose_name='Modified')), ], options={ 'verbose_name_plural': 'Flags', @@ -64,16 +37,11 @@ class Migration(migrations.Migration): name='TenantSwitch', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='The human/computer readable name.', - max_length=100, unique=True, verbose_name='Name')), + ('name', models.CharField(help_text='The human/computer readable name.', max_length=100, unique=True, verbose_name='Name')), ('active', models.BooleanField(default=False, help_text='Is this switch active?', verbose_name='Active')), ('note', models.TextField(blank=True, help_text='Note where this Switch is used.', verbose_name='Note')), - ('created', models.DateTimeField(db_index=True, default=django.utils.timezone.now, - help_text='Date when this Switch was created.', verbose_name='Created')), - ('modified', models.DateTimeField(default=django.utils.timezone.now, - help_text='Date when this Switch was last modified.', verbose_name='Modified')), - ('countries', models.ManyToManyField(blank=True, - help_text='Activate this switch for these countries.', to='users.Country', verbose_name='Countries')), + ('created', models.DateTimeField(db_index=True, default=django.utils.timezone.now, help_text='Date when this Switch was created.', verbose_name='Created')), + ('modified', models.DateTimeField(default=django.utils.timezone.now, help_text='Date when this Switch was last modified.', verbose_name='Modified')), ], options={ 'verbose_name_plural': 'Switches', diff --git a/src/etools/applications/environment/migrations/0002_auto_20190122_1412.py b/src/etools/applications/environment/migrations/0002_auto_20190122_1412.py deleted file mode 100644 index 3a882ba23f..0000000000 --- a/src/etools/applications/environment/migrations/0002_auto_20190122_1412.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-22 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('environment', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='issuecheckconfig', - options={'verbose_name_plural': 'Issue check config'}, - ), - ] diff --git a/src/etools/applications/environment/migrations/0002_initial.py b/src/etools/applications/environment/migrations/0002_initial.py new file mode 100644 index 0000000000..6cfde0f3d0 --- /dev/null +++ b/src/etools/applications/environment/migrations/0002_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('users', '0001_initial'), + ('auth', '0012_alter_user_first_name_max_length'), + ('environment', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tenantswitch', + name='countries', + field=models.ManyToManyField(blank=True, help_text='Activate this switch for these countries.', to='users.Country', verbose_name='Countries'), + ), + migrations.AddField( + model_name='tenantflag', + name='countries', + field=models.ManyToManyField(blank=True, help_text='Activate this flag for these countries.', to='users.Country', verbose_name='Countries'), + ), + migrations.AddField( + model_name='tenantflag', + name='groups', + field=models.ManyToManyField(blank=True, help_text='Activate this flag for these user groups.', to='auth.Group', verbose_name='Users'), + ), + migrations.AddField( + model_name='tenantflag', + name='users', + field=models.ManyToManyField(blank=True, help_text='Activate this flag for these users.', to=settings.AUTH_USER_MODEL, verbose_name='Users'), + ), + ] diff --git a/src/etools/applications/environment/migrations/0003_delete_issuecheckconfig.py b/src/etools/applications/environment/migrations/0003_delete_issuecheckconfig.py deleted file mode 100644 index 6c7c61dacf..0000000000 --- a/src/etools/applications/environment/migrations/0003_delete_issuecheckconfig.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-26 15:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('environment', '0002_auto_20190122_1412'), - ] - - operations = [ - migrations.DeleteModel( - name='IssueCheckConfig', - ), - ] diff --git a/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial.py b/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial.py new file mode 100644 index 0000000000..dba5b7a383 --- /dev/null +++ b/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial.py @@ -0,0 +1,90 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ActivityOverallFinding', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('narrative_finding', models.TextField(blank=True, verbose_name='Narrative Finding')), + ('on_track', models.BooleanField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Activity Overall Finding', + 'verbose_name_plural': 'Activity Overall Findings', + 'ordering': ('monitoring_activity', 'id'), + }, + ), + migrations.CreateModel( + name='ActivityQuestion', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField(verbose_name='Question Text')), + ('is_hact', models.BooleanField(default=False, verbose_name='Count as HACT')), + ('specific_details', models.TextField(blank=True, verbose_name='Specific Details To Probe')), + ('is_enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ], + options={ + 'verbose_name': 'Activity Question', + 'verbose_name_plural': 'Activity Questions', + 'ordering': ('monitoring_activity', 'id'), + }, + ), + migrations.CreateModel( + name='ActivityQuestionOverallFinding', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('value', models.JSONField(blank=True, null=True, verbose_name='Value')), + ], + options={ + 'verbose_name': 'Overall Activity Question Finding', + 'verbose_name_plural': 'Overall Activity Question Findings', + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='ChecklistOverallFinding', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('narrative_finding', models.TextField(blank=True, verbose_name='Narrative Finding')), + ], + options={ + 'verbose_name': 'Checklist Overall Finding', + 'verbose_name_plural': 'Checklist Overall Findings', + 'ordering': ('started_checklist', 'id'), + }, + ), + migrations.CreateModel( + name='Finding', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('value', models.JSONField(blank=True, null=True, verbose_name='Value')), + ], + options={ + 'verbose_name': 'Checklist Finding', + 'verbose_name_plural': 'Checklist Findings', + 'ordering': ('started_checklist', 'id'), + }, + ), + migrations.CreateModel( + name='StartedChecklist', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('information_source', models.CharField(blank=True, max_length=100, verbose_name='Information Source')), + ], + options={ + 'verbose_name': 'Started Checklist', + 'verbose_name_plural': 'Started Checklists', + 'ordering': ('id',), + }, + ), + ] diff --git a/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial_20191113.py b/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial_20191113.py deleted file mode 100644 index fb3df54e60..0000000000 --- a/src/etools/applications/field_monitoring/data_collection/migrations/0001_initial_20191113.py +++ /dev/null @@ -1,150 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-13 10:19 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - ('field_monitoring_settings', '0001_initial_20191113'), - ('reports', '0019_auto_20190816_1609'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('field_monitoring_planning', '0001_initial_20191113'), - ('partners', '0039_auto_20191106_1345'), - ] - - operations = [ - migrations.CreateModel( - name='ActivityQuestion', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('specific_details', models.TextField(blank=True, verbose_name='Specific Details To Probe')), - ('is_enabled', models.BooleanField(default=True, verbose_name='Enabled')), - ('cp_output', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='reports.Result', verbose_name='CP Output')), - ('intervention', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.Intervention', verbose_name='Intervention')), - ('monitoring_activity', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', - to='field_monitoring_planning.MonitoringActivity', verbose_name='Activity')), - ('partner', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.PartnerOrganization', verbose_name='Partner')), - ('question', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activity_questions', - to='field_monitoring_settings.Question', verbose_name='Question')), - ], - options={ - 'verbose_name': 'Activity Question', - 'verbose_name_plural': 'Activity Questions', - 'ordering': ('monitoring_activity', 'id'), - }, - ), - migrations.CreateModel( - name='StartedChecklist', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('information_source', models.CharField(max_length=100, verbose_name='Information Source')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checklists', - to=settings.AUTH_USER_MODEL, verbose_name='Author')), - ('method', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='checklists', - to='field_monitoring_settings.Method', verbose_name='Methods')), - ('monitoring_activity', - models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='checklists', - to='field_monitoring_planning.MonitoringActivity', verbose_name='Activity')), - ], - options={ - 'verbose_name': 'Started Checklist', - 'verbose_name_plural': 'Started Checklists', - 'ordering': ('id',), - }, - ), - migrations.CreateModel( - name='Finding', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.JSONField(blank=True, null=True, verbose_name='Value')), - ('activity_question', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', - to='field_monitoring_data_collection.ActivityQuestion', - verbose_name='Activity Question')), - ('started_checklist', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', - to='field_monitoring_data_collection.StartedChecklist', verbose_name='Checklist')), - ], - options={ - 'verbose_name': 'Checklist Finding', - 'verbose_name_plural': 'Checklist Findings', - 'ordering': ('started_checklist', 'id'), - }, - ), - migrations.CreateModel( - name='ChecklistOverallFinding', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('narrative_finding', models.TextField(blank=True, verbose_name='Narrative Finding')), - ('cp_output', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='reports.Result', verbose_name='CP Output')), - ('intervention', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.Intervention', verbose_name='Intervention')), - ('partner', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.PartnerOrganization', verbose_name='Partner')), - ('started_checklist', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overall_findings', - to='field_monitoring_data_collection.StartedChecklist', verbose_name='Checklist')), - ], - options={ - 'verbose_name': 'Checklist Overall Finding', - 'verbose_name_plural': 'Checklist Overall Findings', - 'ordering': ('started_checklist', 'id'), - }, - ), - migrations.CreateModel( - name='ActivityQuestionOverallFinding', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.JSONField(blank=True, null=True, verbose_name='Value')), - ('activity_question', - models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='overall_finding', - to='field_monitoring_data_collection.ActivityQuestion', verbose_name='Activity')), - ], - options={ - 'verbose_name': 'Overall Activity Question Finding', - 'verbose_name_plural': 'Overall Activity Question Findings', - 'ordering': ('id',), - }, - ), - migrations.CreateModel( - name='ActivityOverallFinding', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('narrative_finding', models.TextField(blank=True, verbose_name='Narrative Finding')), - ('on_track', models.BooleanField(blank=True, null=True,)), - ('cp_output', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='reports.Result', verbose_name='CP Output')), - ('intervention', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.Intervention', verbose_name='Intervention')), - ('monitoring_activity', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overall_findings', - to='field_monitoring_planning.MonitoringActivity', verbose_name='Activity')), - ('partner', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.PartnerOrganization', verbose_name='Partner')), - ], - options={ - 'verbose_name': 'Activity Overall Finding', - 'verbose_name_plural': 'Activity Overall Findings', - 'ordering': ('monitoring_activity', 'id'), - }, - ), - ] diff --git a/src/etools/applications/field_monitoring/data_collection/migrations/0002_auto_20191116_1045.py b/src/etools/applications/field_monitoring/data_collection/migrations/0002_auto_20191116_1045.py deleted file mode 100644 index 28ffdf3f11..0000000000 --- a/src/etools/applications/field_monitoring/data_collection/migrations/0002_auto_20191116_1045.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-16 10:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_data_collection', '0001_initial_20191113'), - ] - - operations = [ - migrations.AlterField( - model_name='startedchecklist', - name='information_source', - field=models.CharField(blank=True, max_length=100, verbose_name='Information Source'), - ), - ] diff --git a/src/etools/applications/field_monitoring/data_collection/migrations/0002_initial.py b/src/etools/applications/field_monitoring/data_collection/migrations/0002_initial.py new file mode 100644 index 0000000000..818eef12f6 --- /dev/null +++ b/src/etools/applications/field_monitoring/data_collection/migrations/0002_initial.py @@ -0,0 +1,117 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('field_monitoring_planning', '0002_initial'), + ('partners', '0001_initial'), + ('reports', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('field_monitoring_data_collection', '0001_initial'), + ('field_monitoring_settings', '0002_initial'), + ] + + operations = [ + migrations.AddField( + model_name='startedchecklist', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checklists', to=settings.AUTH_USER_MODEL, verbose_name='Author'), + ), + migrations.AddField( + model_name='startedchecklist', + name='method', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='checklists', to='field_monitoring_settings.method', verbose_name='Methods'), + ), + migrations.AddField( + model_name='startedchecklist', + name='monitoring_activity', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='checklists', to='field_monitoring_planning.monitoringactivity', verbose_name='Activity'), + ), + migrations.AddField( + model_name='finding', + name='activity_question', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', to='field_monitoring_data_collection.activityquestion', verbose_name='Activity Question'), + ), + migrations.AddField( + model_name='finding', + name='started_checklist', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', to='field_monitoring_data_collection.startedchecklist', verbose_name='Checklist'), + ), + migrations.AddField( + model_name='checklistoverallfinding', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='checklistoverallfinding', + name='intervention', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='checklistoverallfinding', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='checklistoverallfinding', + name='started_checklist', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overall_findings', to='field_monitoring_data_collection.startedchecklist', verbose_name='Checklist'), + ), + migrations.AddField( + model_name='activityquestionoverallfinding', + name='activity_question', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='overall_finding', to='field_monitoring_data_collection.activityquestion', verbose_name='Activity'), + ), + migrations.AddField( + model_name='activityquestion', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='activityquestion', + name='intervention', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='activityquestion', + name='monitoring_activity', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='field_monitoring_planning.monitoringactivity', verbose_name='Activity'), + ), + migrations.AddField( + model_name='activityquestion', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='activityquestion', + name='question', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activity_questions', to='field_monitoring_settings.question', verbose_name='Question'), + ), + migrations.AddField( + model_name='activityoverallfinding', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='activityoverallfinding', + name='intervention', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='activityoverallfinding', + name='monitoring_activity', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overall_findings', to='field_monitoring_planning.monitoringactivity', verbose_name='Activity'), + ), + migrations.AddField( + model_name='activityoverallfinding', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerorganization', verbose_name='Partner'), + ), + ] diff --git a/src/etools/applications/field_monitoring/data_collection/migrations/0003_auto_20210923_1505.py b/src/etools/applications/field_monitoring/data_collection/migrations/0003_auto_20210923_1505.py deleted file mode 100644 index 878f739c16..0000000000 --- a/src/etools/applications/field_monitoring/data_collection/migrations/0003_auto_20210923_1505.py +++ /dev/null @@ -1,69 +0,0 @@ -# Generated by Django 3.2.6 on 2021-09-23 15:05 - -from django.db import migrations, models -from django.db.models import F, OuterRef, Exists - - -def migrate_question_data_to_activity_child(apps, schema_editor): - """copy question important fields to activity questions""" - ActivityQuestion = apps.get_model('field_monitoring_data_collection', 'ActivityQuestion') - # no way to do .update(is_hact=F(...)) because of join - for question in ActivityQuestion.objects.select_related('question').all(): - question.is_hact = question.question.is_hact - question.text = question.question.text - question.save() - - -def cleanup_activity_groups(apps, schema_editor): - """ - it was possible to break activity groups by changing question is_hact flag, so data should be fixed. - remove non-hact activities from groups or remove group if not hact activities left - partner hact values will be regenerated by system itself with update_hact_values periodic task - """ - MonitoringActivityGroup = apps.get_model('field_monitoring_planning', 'MonitoringActivityGroup') - ActivityQuestionOverallFinding = apps.get_model('field_monitoring_data_collection', - 'ActivityQuestionOverallFinding') - - question_sq = ActivityQuestionOverallFinding.objects.filter( - activity_question__monitoring_activity_id=OuterRef('id'), - activity_question__is_hact=True, - activity_question__question__level='partner', - value__isnull=False, - ) - - for group in MonitoringActivityGroup.objects.all(): - # hact filtering code from MonitoringActivitiesQuerySet.filter_hact_for_partner - activities_qs = group.monitoring_activities.all() - hact_activities = list( - activities_qs.annotate(is_hact=Exists(question_sq)).filter(status='completed', is_hact=True) - ) - - if not hact_activities: - group.delete() - - if len(hact_activities) != activities_qs.count(): - group.set(hact_activities) - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_data_collection', '0002_auto_20191116_1045'), - ('field_monitoring_planning', '0012_auto_20210709_1455'), - ] - - operations = [ - migrations.AddField( - model_name='activityquestion', - name='is_hact', - field=models.BooleanField(default=False, verbose_name='Count as HACT'), - ), - migrations.AddField( - model_name='activityquestion', - name='text', - field=models.TextField(default='', verbose_name='Question Text'), - preserve_default=False, - ), - migrations.RunPython(migrate_question_data_to_activity_child, migrations.RunPython.noop), - migrations.RunPython(cleanup_activity_groups, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial_20191113.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial.py similarity index 52% rename from src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial_20191113.py rename to src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial.py index 9fca3d6dc5..c3d0a6b7f0 100644 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial_20191113.py +++ b/src/etools/applications/field_monitoring/fm_settings/migrations/0001_initial.py @@ -1,6 +1,5 @@ -# Generated by Django 2.2.6 on 2019-11-13 10:18 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -from django.conf import settings import django.contrib.gis.db.models.fields from django.db import migrations, models import django.db.models.deletion @@ -9,14 +8,10 @@ class Migration(migrations.Migration): + initial = True dependencies = [ - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('partners', '0039_auto_20191106_1345'), - ('reports', '0019_auto_20190816_1609'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -33,21 +28,27 @@ class Migration(migrations.Migration): 'ordering': ('order',), }, ), + migrations.CreateModel( + name='GlobalConfig', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'verbose_name': 'Global Config', + 'verbose_name_plural': 'Global Configs', + 'ordering': ('id',), + }, + ), migrations.CreateModel( name='LocationSite', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=254, verbose_name='Name')), ('p_code', models.CharField(blank=True, default='', max_length=32, verbose_name='P Code')), - ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, - verbose_name='Point')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point')), ('is_active', models.BooleanField(blank=True, default=True, verbose_name='Active')), - ('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sites', - to='locations.Location', verbose_name='Parent Location')), ], options={ 'verbose_name': 'Location Site', @@ -56,42 +57,31 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='Method', + name='LogIssue', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100, verbose_name='Name')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('issue', models.TextField(verbose_name='Issue For Attention/Probing')), + ('status', models.CharField(choices=[('new', 'New'), ('past', 'Past')], default='new', max_length=10)), ], options={ - 'verbose_name': 'Method', - 'verbose_name_plural': 'Methods', + 'verbose_name': 'Log Issue', + 'verbose_name_plural': 'Log Issues', 'ordering': ('id',), }, ), migrations.CreateModel( - name='Question', + name='Method', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('answer_type', models.CharField(choices=[('text', 'Text'), ('number', 'Number'), ('bool', 'Boolean'), - ('likert_scale', 'Likert Scale')], max_length=15, - verbose_name='Answer Type')), - ('choices_size', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Choices Size')), - ('level', - models.CharField(choices=[('partner', 'Partner'), ('output', 'Output'), ('intervention', 'PD/SSFA')], - max_length=15, verbose_name='Level')), - ('text', models.TextField(verbose_name='Question Text')), - ('is_hact', models.BooleanField(default=False, verbose_name='Count as HACT')), - ('is_custom', models.BooleanField(default=False, verbose_name='Is Custom')), - ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), - ('category', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_settings.Category', - verbose_name='Category')), - ('methods', - models.ManyToManyField(blank=True, to='field_monitoring_settings.Method', verbose_name='Methods')), - ('sections', models.ManyToManyField(to='reports.Section', verbose_name='Sections')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('short_name', models.CharField(max_length=10, verbose_name='Short Name')), + ('use_information_source', models.BooleanField(default=False, verbose_name='Ask for information source in checklist?')), ], options={ - 'verbose_name': 'Question', - 'verbose_name_plural': 'Questions', + 'verbose_name': 'Method', + 'verbose_name_plural': 'Methods', 'ordering': ('id',), }, ), @@ -99,10 +89,8 @@ class Migration(migrations.Migration): name='Option', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('label', models.CharField(max_length=50, verbose_name='Label')), + ('label', models.CharField(max_length=100, verbose_name='Label')), ('value', models.JSONField(blank=True, null=True, verbose_name='Value')), - ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', - to='field_monitoring_settings.Question', verbose_name='Question')), ], options={ 'verbose_name': 'Option', @@ -111,35 +99,24 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='LogIssue', + name='Question', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('issue', models.TextField(verbose_name='Issue For Attention/Probing')), - ('status', models.CharField(choices=[('new', 'New'), ('past', 'Past')], default='new', max_length=10)), - ('author', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_logissues', - to=settings.AUTH_USER_MODEL, verbose_name='Issue Raised By')), - ('cp_output', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='log_issues', to='reports.Result', - verbose_name='CP Output')), - ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='log_issues', to='locations.Location', - verbose_name='Location')), - ('location_site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='log_issues', - to='field_monitoring_settings.LocationSite', verbose_name='Site')), - ('partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='log_issues', to='partners.PartnerOrganization', - verbose_name='Partner')), + ('answer_type', models.CharField(choices=[('text', 'Text'), ('number', 'Number'), ('bool', 'Boolean'), ('likert_scale', 'Likert Scale')], max_length=15, verbose_name='Answer Type')), + ('choices_size', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Choices Size')), + ('level', models.CharField(choices=[('partner', 'Partner'), ('output', 'Output'), ('intervention', 'PD/SPD')], max_length=15, verbose_name='Level')), + ('text', models.TextField(verbose_name='Question Text')), + ('is_hact', models.BooleanField(default=False, verbose_name='Count as HACT')), + ('is_custom', models.BooleanField(default=False, verbose_name='Is Custom')), + ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), + ('order', models.PositiveIntegerField(db_index=True, default=1)), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_settings.category', verbose_name='Category')), + ('methods', models.ManyToManyField(to='field_monitoring_settings.Method', verbose_name='Methods')), ], options={ - 'verbose_name': 'Log Issue', - 'verbose_name_plural': 'Log Issues', - 'ordering': ('id',), + 'verbose_name': 'Question', + 'verbose_name_plural': 'Questions', + 'ordering': ('order',), }, ), ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0002_initial.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0002_initial.py new file mode 100644 index 0000000000..5570d41a5f --- /dev/null +++ b/src/etools/applications/field_monitoring/fm_settings/migrations/0002_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('field_monitoring_settings', '0001_initial'), + ('reports', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='question', + name='sections', + field=models.ManyToManyField(blank=True, to='reports.Section', verbose_name='Sections'), + ), + migrations.AddField( + model_name='option', + name='question', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='field_monitoring_settings.question', verbose_name='Question'), + ), + ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0002_method_use_information_source.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0002_method_use_information_source.py deleted file mode 100644 index d5a28cfa5c..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0002_method_use_information_source.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-16 10:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0001_initial_20191113'), - ] - - operations = [ - migrations.AddField( - model_name='method', - name='use_information_source', - field=models.BooleanField(default=False, verbose_name='Ask for information source in checklist?'), - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0003_initial.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0003_initial.py new file mode 100644 index 0000000000..c39027e21c --- /dev/null +++ b/src/etools/applications/field_monitoring/fm_settings/migrations/0003_initial.py @@ -0,0 +1,55 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0001_initial'), + ('reports', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('field_monitoring_settings', '0002_initial'), + ('locations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='logissue', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_logissues', to=settings.AUTH_USER_MODEL, verbose_name='Issue Raised By'), + ), + migrations.AddField( + model_name='logissue', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='log_issues', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='logissue', + name='location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='log_issues', to='locations.location', verbose_name='Location'), + ), + migrations.AddField( + model_name='logissue', + name='location_site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='log_issues', to='field_monitoring_settings.locationsite', verbose_name='Site'), + ), + migrations.AddField( + model_name='logissue', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='log_issues', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='locationsite', + name='parent', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sites', to='locations.location', verbose_name='Parent Location'), + ), + migrations.AlterUniqueTogether( + name='option', + unique_together={('question', 'value')}, + ), + ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0003_method_short_name.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0003_method_short_name.py deleted file mode 100644 index 5c1efd53a5..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0003_method_short_name.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-03 11:02 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0002_method_use_information_source'), - ] - - operations = [ - migrations.AddField( - model_name='method', - name='short_name', - field=models.CharField(default='test', max_length=10, verbose_name='Short Name'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0004_globalconfig.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0004_globalconfig.py deleted file mode 100644 index 41107ab7e0..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0004_globalconfig.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-06 13:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0003_method_short_name'), - ] - - operations = [ - migrations.CreateModel( - name='GlobalConfig', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ], - options={ - 'verbose_name': 'Global Config', - 'verbose_name_plural': 'Global Configs', - 'ordering': ('id',), - }, - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0005_auto_20191211_0903.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0005_auto_20191211_0903.py deleted file mode 100644 index 1e96d9decb..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0005_auto_20191211_0903.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-11 09:03 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0004_globalconfig'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='option', - unique_together={('question', 'value')}, - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0006_auto_20191212_1257.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0006_auto_20191212_1257.py deleted file mode 100644 index 7fe12967fa..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0006_auto_20191212_1257.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-12 12:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0005_auto_20191211_0903'), - ] - - operations = [ - migrations.AlterField( - model_name='question', - name='sections', - field=models.ManyToManyField(blank=True, to='reports.Section', verbose_name='Sections'), - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0007_auto_20200219_1036.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0007_auto_20200219_1036.py deleted file mode 100644 index fc38e633cb..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0007_auto_20200219_1036.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-02-19 10:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0006_auto_20191212_1257'), - ] - - operations = [ - migrations.AlterField( - model_name='question', - name='methods', - field=models.ManyToManyField(to='field_monitoring_settings.Method', verbose_name='Methods'), - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0008_alter_option_label.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0008_alter_option_label.py deleted file mode 100644 index c070a562ae..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0008_alter_option_label.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-07-18 10:00 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0007_auto_20200219_1036'), - ] - - operations = [ - migrations.AlterField( - model_name='option', - name='label', - field=models.CharField(max_length=100, verbose_name='Label'), - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0008_auto_20210108_1634.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0008_auto_20210108_1634.py deleted file mode 100644 index affeebddca..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0008_auto_20210108_1634.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-01-08 16:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0007_auto_20200219_1036'), - ] - - operations = [ - migrations.AlterField( - model_name='question', - name='level', - field=models.CharField(choices=[('partner', 'Partner'), ('output', 'Output'), ('intervention', 'PD/SPD')], max_length=15, verbose_name='Level'), - ), - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0009_merge_0008_alter_option_label_0008_auto_20210108_1634.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0009_merge_0008_alter_option_label_0008_auto_20210108_1634.py deleted file mode 100644 index 3e439dcc17..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0009_merge_0008_alter_option_label_0008_auto_20210108_1634.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-05 07:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0008_alter_option_label'), - ('field_monitoring_settings', '0008_auto_20210108_1634'), - ] - - operations = [ - ] diff --git a/src/etools/applications/field_monitoring/fm_settings/migrations/0010_auto_20240130_0815.py b/src/etools/applications/field_monitoring/fm_settings/migrations/0010_auto_20240130_0815.py deleted file mode 100644 index 583e87d419..0000000000 --- a/src/etools/applications/field_monitoring/fm_settings/migrations/0010_auto_20240130_0815.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.19 on 2024-01-30 08:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0009_merge_0008_alter_option_label_0008_auto_20210108_1634'), - ] - - operations = [ - migrations.AlterModelOptions( - name='question', - options={'ordering': ('order',), 'verbose_name': 'Question', 'verbose_name_plural': 'Questions'}, - ), - migrations.AddField( - model_name='question', - name='order', - field=models.PositiveIntegerField(db_index=True, default=1), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0001_initial.py b/src/etools/applications/field_monitoring/planning/migrations/0001_initial.py new file mode 100644 index 0000000000..1c371c661f --- /dev/null +++ b/src/etools/applications/field_monitoring/planning/migrations/0001_initial.py @@ -0,0 +1,94 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +import datetime +from django.db import migrations, models +import django.utils.timezone +from django.utils.timezone import utc +import django_fsm +import model_utils.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('action_points', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='MonitoringActivity', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('number', models.CharField(blank=True, editable=False, max_length=64, null=True, unique=True, verbose_name='Reference Number')), + ('monitor_type', models.CharField(choices=[('staff', 'Staff'), ('tpm', 'TPM')], default='staff', max_length=10)), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), + ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('checklist', 'Checklist'), ('review', 'Review'), ('assigned', 'Assigned'), ('data_collection', 'Data Collection'), ('report_finalization', 'Report Finalization'), ('submitted', 'Submitted'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='draft', max_length=20, verbose_name='Status')), + ('reject_reason', models.TextField(blank=True, verbose_name='Rejection reason')), + ('report_reject_reason', models.TextField(blank=True, verbose_name='Report rejection reason')), + ('cancel_reason', models.TextField(blank=True, verbose_name='Cancellation reason')), + ], + options={ + 'verbose_name': 'Monitoring Activity', + 'verbose_name_plural': 'Monitoring Activities', + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='MonitoringActivityGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + migrations.CreateModel( + name='QuestionTemplate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), + ('specific_details', models.TextField(blank=True, verbose_name='Specific Details To Probe')), + ], + options={ + 'verbose_name': 'Question Template', + 'verbose_name_plural': 'Question Templates', + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='YearPlan', + fields=[ + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('year', models.PositiveSmallIntegerField(primary_key=True, serialize=False)), + ('prioritization_criteria', models.TextField(blank=True, verbose_name='Prioritization Criteria')), + ('methodology_notes', models.TextField(blank=True, verbose_name='Methodology Notes & Standards')), + ('target_visits', models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Target Visits For The Year')), + ('modalities', models.TextField(blank=True, verbose_name='Modalities')), + ('partner_engagement', models.TextField(blank=True, verbose_name='Partner Engagement')), + ('other_aspects', models.TextField(blank=True, verbose_name='Other Aspects of the Field Monitoring Plan')), + ], + options={ + 'verbose_name': 'Year Plan', + 'verbose_name_plural': 'Year Plans', + 'ordering': ('year',), + }, + ), + migrations.CreateModel( + name='MonitoringActivityActionPoint', + fields=[ + ], + options={ + 'verbose_name': 'Monitoring Activity Action Point', + 'verbose_name_plural': 'Monitoring Activity Action Points', + 'abstract': False, + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('action_points.actionpoint',), + ), + ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0001_initial_20191113.py b/src/etools/applications/field_monitoring/planning/migrations/0001_initial_20191113.py deleted file mode 100644 index 0d8e556e73..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0001_initial_20191113.py +++ /dev/null @@ -1,131 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-13 10:19 - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.manager -import django.utils.timezone -from django.utils.timezone import utc -import django_fsm -import model_utils.fields - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - ('field_monitoring_settings', '0001_initial_20191113'), - ('tpmpartners', '0005_auto_20190625_1437'), - ('users', '0012_auto_20190513_1804'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('reports', '0019_auto_20190816_1609'), - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('partners', '0039_auto_20191106_1345'), - ] - - operations = [ - migrations.CreateModel( - name='YearPlan', - fields=[ - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('year', models.PositiveSmallIntegerField(primary_key=True, serialize=False)), - ('prioritization_criteria', models.TextField(blank=True, verbose_name='Prioritization Criteria')), - ('methodology_notes', models.TextField(blank=True, verbose_name='Methodology Notes & Standards')), - ('target_visits', - models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Target Visits For The Year')), - ('modalities', models.TextField(blank=True, verbose_name='Modalities')), - ('partner_engagement', models.TextField(blank=True, verbose_name='Partner Engagement')), - ('other_aspects', - models.TextField(blank=True, verbose_name='Other Aspects of the Field Monitoring Plan')), - ], - options={ - 'verbose_name': 'Year Plan', - 'verbose_name_plural': 'Year Plans', - 'ordering': ('year',), - }, - ), - migrations.CreateModel( - name='QuestionTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), - ('specific_details', models.TextField(blank=True, verbose_name='Specific Details To Probe')), - ('cp_output', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='reports.Result', verbose_name='CP Output')), - ('intervention', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.Intervention', verbose_name='Intervention')), - ('partner', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', - to='partners.PartnerOrganization', verbose_name='Partner')), - ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='templates', - to='field_monitoring_settings.Question', verbose_name='Question')), - ], - options={ - 'verbose_name': 'Question Template', - 'verbose_name_plural': 'Question Templates', - 'ordering': ('id',), - }, - ), - migrations.CreateModel( - name='MonitoringActivity', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), - verbose_name='Deleted At')), - ('activity_type', - models.CharField(choices=[('staff', 'Staff'), ('tpm', 'TPM')], default='staff', max_length=10)), - ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), - ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), - ('status', django_fsm.FSMField( - choices=[('draft', 'Draft'), ('checklist', 'Checklist'), ('review', 'Review'), - ('assigned', 'Assigned'), ('data_collection', 'Data Collection'), - ('report_finalization', 'Report Finalization'), ('submitted', 'Submitted'), - ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='draft', max_length=20, - verbose_name='Status')), - ('cp_outputs', - models.ManyToManyField(blank=True, related_name='monitoring_activities', to='reports.Result', - verbose_name='Outputs')), - ('field_office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='users.Office', verbose_name='Field Office')), - ('interventions', - models.ManyToManyField(blank=True, related_name='monitoring_activities', to='partners.Intervention', - verbose_name='PD/SSFA')), - ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='monitoring_activities', to='locations.Location', - verbose_name='Location')), - ('location_site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='monitoring_activities', - to='field_monitoring_settings.LocationSite', verbose_name='Site')), - ('partners', models.ManyToManyField(blank=True, related_name='monitoring_activities', - to='partners.PartnerOrganization', verbose_name='Partner')), - ('person_responsible', - models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Person Responsible')), - ('sections', models.ManyToManyField(blank=True, to='reports.Section', verbose_name='Sections')), - ('team_members', - models.ManyToManyField(blank=True, related_name='monitoring_activities', to=settings.AUTH_USER_MODEL, - verbose_name='Team Members')), - ('tpm_partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='tpmpartners.TPMPartner', verbose_name='TPM Partner')), - ], - options={ - 'verbose_name': 'Monitoring Activity', - 'verbose_name_plural': 'Monitoring Activities', - 'ordering': ('id',), - }, - managers=[ - ('admin_objects', django.db.models.manager.Manager()), - ], - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0002_auto_20191119_1503.py b/src/etools/applications/field_monitoring/planning/migrations/0002_auto_20191119_1503.py deleted file mode 100644 index 6127e0f4c9..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0002_auto_20191119_1503.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-19 15:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0001_initial_20191113'), - ] - - operations = [ - migrations.AddField( - model_name='monitoringactivity', - name='cancel_reason', - field=models.TextField(blank=True, verbose_name='Cancellation reason'), - ), - migrations.AddField( - model_name='monitoringactivity', - name='reject_reason', - field=models.TextField(blank=True, verbose_name='Rejection reason'), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0002_initial.py b/src/etools/applications/field_monitoring/planning/migrations/0002_initial.py new file mode 100644 index 0000000000..f1b8b217fe --- /dev/null +++ b/src/etools/applications/field_monitoring/planning/migrations/0002_initial.py @@ -0,0 +1,85 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0001_initial'), + ('reports', '0001_initial'), + ('field_monitoring_planning', '0001_initial'), + ('field_monitoring_settings', '0001_initial'), + ('locations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='questiontemplate', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='questiontemplate', + name='intervention', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='questiontemplate', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='questiontemplate', + name='question', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='templates', to='field_monitoring_settings.question', verbose_name='Question'), + ), + migrations.AddField( + model_name='monitoringactivitygroup', + name='monitoring_activities', + field=models.ManyToManyField(related_name='groups', to='field_monitoring_planning.MonitoringActivity'), + ), + migrations.AddField( + model_name='monitoringactivitygroup', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='monitoring_activity_groups', to='partners.partnerorganization'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='cp_outputs', + field=models.ManyToManyField(blank=True, related_name='monitoring_activities', to='reports.Result', verbose_name='Outputs'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='field_office', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.office', verbose_name='Field Office'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='interventions', + field=models.ManyToManyField(blank=True, related_name='monitoring_activities', to='partners.Intervention', verbose_name='PD/SPD'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='monitoring_activities', to='locations.location', verbose_name='Location'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='location_site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='monitoring_activities', to='field_monitoring_settings.locationsite', verbose_name='Site'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='offices', + field=models.ManyToManyField(blank=True, related_name='offices', to='reports.Office', verbose_name='Field Offices'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='partners', + field=models.ManyToManyField(blank=True, related_name='monitoring_activities', to='partners.PartnerOrganization', verbose_name='Partner'), + ), + ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0014_auto_20240402_0828.py b/src/etools/applications/field_monitoring/planning/migrations/0003_initial.py similarity index 51% rename from src/etools/applications/field_monitoring/planning/migrations/0014_auto_20240402_0828.py rename to src/etools/applications/field_monitoring/planning/migrations/0003_initial.py index e528acd1de..02b079918e 100644 --- a/src/etools/applications/field_monitoring/planning/migrations/0014_auto_20240402_0828.py +++ b/src/etools/applications/field_monitoring/planning/migrations/0003_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.19 on 2024-04-02 08:28 +# Generated by Django 3.2.19 on 2024-07-19 11:57 from django.conf import settings from django.db import migrations, models @@ -7,9 +7,13 @@ class Migration(migrations.Migration): + initial = True + dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('field_monitoring_planning', '0013_merge_0008_auto_20210108_1634_0012_auto_20210709_1455'), + ('tpmpartners', '0001_initial'), + ('field_monitoring_planning', '0002_initial'), + ('reports', '0001_initial'), ] operations = [ @@ -25,7 +29,22 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='monitoringactivity', - name='report_reviewer_preliminary', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Preliminary Report Reviewer'), + name='sections', + field=models.ManyToManyField(blank=True, to='reports.Section', verbose_name='Sections'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='team_members', + field=models.ManyToManyField(blank=True, related_name='monitoring_activities', to=settings.AUTH_USER_MODEL, verbose_name='Team Members'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='tpm_partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='tpmpartners.tpmpartner', verbose_name='TPM Partner'), + ), + migrations.AddField( + model_name='monitoringactivity', + name='visit_lead', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Person Responsible'), ), ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0003_monitoringactivityactionpoint.py b/src/etools/applications/field_monitoring/planning/migrations/0003_monitoringactivityactionpoint.py deleted file mode 100644 index 4acdb1092b..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0003_monitoringactivityactionpoint.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-26 11:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0013_actionpoint_monitoring_activity'), - ('field_monitoring_planning', '0002_auto_20191119_1503'), - ] - - operations = [ - migrations.CreateModel( - name='MonitoringActivityActionPoint', - fields=[ - ], - options={ - 'verbose_name': 'Monitoring Activity Action Point', - 'verbose_name_plural': 'Monitoring Activity Action Points', - 'abstract': False, - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('action_points.actionpoint',), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0004_auto_20191204_0804.py b/src/etools/applications/field_monitoring/planning/migrations/0004_auto_20191204_0804.py deleted file mode 100644 index 26c6d3a281..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0004_auto_20191204_0804.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-04 08:04 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0003_monitoringactivityactionpoint'), - ] - - operations = [ - migrations.RemoveField('monitoringactivity', 'field_office'), - migrations.AddField( - model_name='monitoringactivity', - name='field_office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.Office', verbose_name='Field Office'), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0005_auto_20191211_1414.py b/src/etools/applications/field_monitoring/planning/migrations/0005_auto_20191211_1414.py deleted file mode 100644 index 202ca0887f..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0005_auto_20191211_1414.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-11 14:14 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0004_auto_20191204_0804'), - ] - - operations = [ - migrations.RenameField( - model_name='monitoringactivity', - old_name='activity_type', - new_name='monitor_type', - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0006_monitoringactivity_report_reject_reason.py b/src/etools/applications/field_monitoring/planning/migrations/0006_monitoringactivity_report_reject_reason.py deleted file mode 100644 index f2aee119cd..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0006_monitoringactivity_report_reject_reason.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-16 15:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0005_auto_20191211_1414'), - ] - - operations = [ - migrations.AddField( - model_name='monitoringactivity', - name='report_reject_reason', - field=models.TextField(blank=True, verbose_name='Report rejection reason'), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0007_monitoringactivity_number.py b/src/etools/applications/field_monitoring/planning/migrations/0007_monitoringactivity_number.py deleted file mode 100644 index a26584056d..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0007_monitoringactivity_number.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.2.7 on 2020-02-05 13:46 - -from django.db import connection, migrations, models - - -def assign_reference_number(apps, schema_editor): - # Only run this when NOT in test - if connection.tenant.schema_name != "test": - MonitoringActivity = apps.get_model('field_monitoring_planning', 'MonitoringActivity') - Country = apps.get_model("users", "country") - - country = Country.objects.get( - schema_name=connection.tenant.schema_name, - ) - for activity in MonitoringActivity.admin_objects.all(): - activity.number = '{}/{}/{}/FMA'.format( - country.country_short_code, - activity.created.year, - activity.id, - ) - activity.save(update_fields=['number']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0006_monitoringactivity_report_reject_reason'), - ('users', '0013_auto_20191010_1621'), - ] - - operations = [ - migrations.AddField( - model_name='monitoringactivity', - name='number', - field=models.CharField(blank=True, editable=False, max_length=64, null=True, unique=True, verbose_name='Reference Number'), - ), - migrations.RunPython(assign_reference_number, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0008_auto_20210108_1634.py b/src/etools/applications/field_monitoring/planning/migrations/0008_auto_20210108_1634.py deleted file mode 100644 index 2274045085..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0008_auto_20210108_1634.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-01-08 16:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0007_monitoringactivity_number'), - ] - - operations = [ - migrations.AlterField( - model_name='monitoringactivity', - name='interventions', - field=models.ManyToManyField(blank=True, related_name='monitoring_activities', to='partners.Intervention', verbose_name='PD/SPD'), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0008_monitoringactivity_offices.py b/src/etools/applications/field_monitoring/planning/migrations/0008_monitoringactivity_offices.py deleted file mode 100644 index 7a31b9f2cf..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0008_monitoringactivity_offices.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.11 on 2021-03-18 20:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0025_auto_20191220_2022'), - ('field_monitoring_planning', '0007_monitoringactivity_number'), - ] - - operations = [ - migrations.AddField( - model_name='monitoringactivity', - name='offices', - field=models.ManyToManyField(blank=True, related_name='offices', to='reports.Office', verbose_name='Field Offices'), - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0009_auto_20210318_2046.py b/src/etools/applications/field_monitoring/planning/migrations/0009_auto_20210318_2046.py deleted file mode 100644 index e4f849cfc9..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0009_auto_20210318_2046.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.2.11 on 2021-03-18 20:46 - -from django.db import migrations, connection - - -def office2offices(apps, schema_editor): - if connection.tenant.schema_name != "test": - MonitoringActivity = apps.get_model('field_monitoring_planning', 'MonitoringActivity') - for ma in MonitoringActivity.admin_objects.all(): - if ma.field_office: - ma.offices.add(ma.field_office) - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0008_monitoringactivity_offices'), - ] - - operations = [ - migrations.RunPython(office2offices, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0010_auto_20210614_0738.py b/src/etools/applications/field_monitoring/planning/migrations/0010_auto_20210614_0738.py deleted file mode 100644 index f8ad4c0e79..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0010_auto_20210614_0738.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-14 07:38 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0009_auto_20210318_2046'), - ] - - operations = [ - migrations.RenameField( - model_name='monitoringactivity', - old_name='person_responsible', - new_name='visit_lead', - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0011_monitoringactivitygroup.py b/src/etools/applications/field_monitoring/planning/migrations/0011_monitoringactivitygroup.py deleted file mode 100644 index 4ac0667a74..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0011_monitoringactivitygroup.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.20 on 2021-06-30 10:50 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0048_auto_20210506_0803'), - ('field_monitoring_planning', '0010_auto_20210614_0738'), - ] - - operations = [ - migrations.CreateModel( - name='MonitoringActivityGroup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('monitoring_activities', models.ManyToManyField(related_name='groups', to='field_monitoring_planning.MonitoringActivity')), - ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='monitoring_activity_groups', to='partners.PartnerOrganization')), - ], - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0012_auto_20210709_1455.py b/src/etools/applications/field_monitoring/planning/migrations/0012_auto_20210709_1455.py deleted file mode 100644 index bd0d2ef940..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0012_auto_20210709_1455.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.20 on 2021-07-09 14:55 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0011_monitoringactivitygroup'), - ] - - operations = [ - migrations.AlterModelManagers( - name='monitoringactivity', - managers=[ - ], - ), - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0013_merge_0008_auto_20210108_1634_0012_auto_20210709_1455.py b/src/etools/applications/field_monitoring/planning/migrations/0013_merge_0008_auto_20210108_1634_0012_auto_20210709_1455.py deleted file mode 100644 index 6580380a76..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0013_merge_0008_auto_20210108_1634_0012_auto_20210709_1455.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-13 14:28 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0008_auto_20210108_1634'), - ('field_monitoring_planning', '0012_auto_20210709_1455'), - ] - - operations = [ - ] diff --git a/src/etools/applications/field_monitoring/planning/migrations/0015_remove_monitoringactivity_report_reviewer_preliminary.py b/src/etools/applications/field_monitoring/planning/migrations/0015_remove_monitoringactivity_report_reviewer_preliminary.py deleted file mode 100644 index 6a7659ed1f..0000000000 --- a/src/etools/applications/field_monitoring/planning/migrations/0015_remove_monitoringactivity_report_reviewer_preliminary.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.19 on 2024-04-11 05:20 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0014_auto_20240402_0828'), - ] - - operations = [ - migrations.RemoveField( - model_name='monitoringactivity', - name='report_reviewer_preliminary', - ), - ] diff --git a/src/etools/applications/funds/migrations/0001_initial.py b/src/etools/applications/funds/migrations/0001_initial.py index d4d6428e3d..d84f241959 100644 --- a/src/etools/applications/funds/migrations/0001_initial.py +++ b/src/etools/applications/funds/migrations/0001_initial.py @@ -1,9 +1,9 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 +from django.db import migrations, models import django.db.models.deletion import django.utils.timezone -from django.db import migrations, models - +import etools.libraries.djangolib.fields import model_utils.fields @@ -19,10 +19,8 @@ class Migration(migrations.Migration): name='Donor', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=45, unique=True, verbose_name='Name')), ], options={ @@ -33,17 +31,15 @@ class Migration(migrations.Migration): name='FundsCommitmentHeader', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('vendor_code', models.CharField(max_length=20, verbose_name='Vendor Code')), ('fc_number', models.CharField(max_length=20, unique=True, verbose_name='Number')), ('document_date', models.DateField(blank=True, null=True, verbose_name='Document Date')), - ('fc_type', models.CharField(blank=True, max_length=50, null=True, verbose_name='Type')), - ('currency', models.CharField(blank=True, max_length=50, null=True, verbose_name='Currency')), - ('document_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Document')), - ('exchange_rate', models.CharField(blank=True, max_length=20, null=True, verbose_name='Exchange Rate')), + ('fc_type', models.CharField(blank=True, default='', max_length=50, verbose_name='Type')), + ('currency', etools.libraries.djangolib.fields.CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLE', 'SLE'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=50, verbose_name='Currency')), + ('document_text', models.CharField(blank=True, default='', max_length=255, verbose_name='Document')), + ('exchange_rate', models.CharField(blank=True, default='', max_length=20, verbose_name='Exchange Rate')), ('responsible_person', models.CharField(blank=True, max_length=100, null=True, verbose_name='Responsible')), ], options={ @@ -54,98 +50,87 @@ class Migration(migrations.Migration): name='FundsCommitmentItem', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('fc_ref_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='Number')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('fc_ref_number', models.CharField(blank=True, default='', max_length=30, verbose_name='Number')), ('line_item', models.CharField(max_length=5, verbose_name='Line Item')), - ('wbs', models.CharField(blank=True, max_length=30, null=True, verbose_name='WBS')), - ('grant_number', models.CharField(blank=True, max_length=20, null=True, verbose_name='Grant Number')), - ('fund', models.CharField(blank=True, max_length=10, null=True, verbose_name='Fund')), - ('gl_account', models.CharField(blank=True, max_length=15, null=True, verbose_name='GL Account')), + ('wbs', models.CharField(blank=True, default='', max_length=30, verbose_name='WBS')), + ('grant_number', models.CharField(blank=True, default='', max_length=20, verbose_name='Grant Number')), + ('fund', models.CharField(blank=True, default='', max_length=10, verbose_name='Fund')), + ('gl_account', models.CharField(blank=True, default='', max_length=15, verbose_name='GL Account')), ('due_date', models.DateField(blank=True, null=True, verbose_name='Due Date')), - ('fr_number', models.CharField(blank=True, max_length=20, null=True, verbose_name='FR Number')), - ('commitment_amount', models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='Amount')), - ('commitment_amount_dc', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Amount DC')), - ('amount_changed', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Amount Changed')), - ('line_item_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Description')), + ('fr_number', models.CharField(blank=True, default='', max_length=20, verbose_name='FR Number')), + ('commitment_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount')), + ('commitment_amount_dc', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount DC')), + ('amount_changed', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Changed')), + ('line_item_text', models.CharField(blank=True, default='', max_length=255, verbose_name='Description')), ], ), migrations.CreateModel( name='FundsReservationHeader', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('vendor_code', models.CharField(max_length=20, verbose_name='Vendor Code')), ('fr_number', models.CharField(max_length=20, unique=True, verbose_name='FR Number')), ('document_date', models.DateField(blank=True, null=True, verbose_name='Document Date')), - ('fr_type', models.CharField(blank=True, max_length=50, null=True, verbose_name='Type')), - ('currency', models.CharField(blank=True, max_length=50, null=True, verbose_name='Currency')), - ('document_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Document Text')), - ('intervention_amt', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Current FR Amount')), - ('total_amt', models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='FR Overall Amount')), - ('total_amt_local', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='FR Overall Amount DC')), - ('actual_amt', models.DecimalField(decimal_places=2, default=0, - max_digits=12, verbose_name='Actual Cash Transfer')), - ('actual_amt_local', models.DecimalField(decimal_places=2, default=0, - max_digits=12, verbose_name='Actual Cash Transfer Local')), - ('outstanding_amt', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Outstanding DCT')), - ('outstanding_amt_local', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Outstanding DCT Local')), + ('fr_type', models.CharField(blank=True, default='', max_length=50, verbose_name='Type')), + ('currency', etools.libraries.djangolib.fields.CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLE', 'SLE'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=50, verbose_name='Currency')), + ('document_text', models.CharField(blank=True, default='', max_length=255, verbose_name='Document Text')), + ('intervention_amt', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Current FR Amount')), + ('total_amt', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='FR Overall Amount')), + ('total_amt_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='FR Overall Amount DC')), + ('actual_amt', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Actual Cash Transfer')), + ('actual_amt_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Actual Cash Transfer Local')), + ('outstanding_amt', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Outstanding DCT')), + ('outstanding_amt_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Outstanding DCT Local')), ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), + ('multi_curr_flag', models.BooleanField(default=False, verbose_name='Actual and DCT in various currencies')), + ('completed_flag', models.BooleanField(default=False, verbose_name='FR marked as completed in Vision')), + ('delegated', models.BooleanField(default=False, verbose_name='FR delegated from another CO')), ], options={ 'ordering': ['fr_number'], }, ), migrations.CreateModel( - name='FundsReservationItem', + name='Grant', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('fr_ref_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='Item Number')), - ('line_item', models.CharField(max_length=5, verbose_name='Line Item')), - ('wbs', models.CharField(blank=True, max_length=30, null=True, verbose_name='WBS')), - ('grant_number', models.CharField(blank=True, max_length=20, null=True, verbose_name='Grant Number')), - ('fund', models.CharField(blank=True, max_length=10, null=True, verbose_name='Fund')), - ('overall_amount', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Overall Amount')), - ('overall_amount_dc', models.DecimalField(decimal_places=2, - default=0, max_digits=12, verbose_name='Overall Amount DC')), - ('due_date', models.DateField(blank=True, null=True, verbose_name='Due Date')), - ('line_item_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Description')), - ('fund_reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='fr_items', to='funds.FundsReservationHeader', verbose_name='FR Number')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('description', models.CharField(blank=True, default='', max_length=255, verbose_name='Description')), + ('expiry', models.DateField(blank=True, null=True, verbose_name='Expiry')), + ('donor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.donor', verbose_name='Donor')), ], + options={ + 'ordering': ['donor'], + }, ), migrations.CreateModel( - name='Grant', + name='FundsReservationItem', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), - ('description', models.CharField(blank=True, max_length=255, null=True, verbose_name='Description')), - ('expiry', models.DateField(blank=True, null=True, verbose_name='Expiry')), - ('donor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.Donor', verbose_name='Donor')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('fr_ref_number', models.CharField(blank=True, default='', max_length=30, verbose_name='Item Number')), + ('line_item', models.PositiveSmallIntegerField(verbose_name='Line Item')), + ('wbs', models.CharField(blank=True, default='', max_length=30, verbose_name='WBS')), + ('donor', models.CharField(blank=True, max_length=256, null=True, verbose_name='Donor Name')), + ('donor_code', models.CharField(blank=True, max_length=30, null=True, verbose_name='Donor Code')), + ('grant_number', models.CharField(blank=True, default='', max_length=20, verbose_name='Grant Number')), + ('fund', models.CharField(blank=True, default='', max_length=10, verbose_name='Fund')), + ('overall_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Overall Amount')), + ('overall_amount_dc', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Overall Amount DC')), + ('due_date', models.DateField(blank=True, null=True, verbose_name='Due Date')), + ('line_item_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Description')), + ('fund_reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fr_items', to='funds.fundsreservationheader', verbose_name='FR Number')), ], options={ - 'ordering': ['donor'], + 'ordering': ('line_item',), }, ), ] diff --git a/src/etools/applications/funds/migrations/0002_auto_20180326_1605.py b/src/etools/applications/funds/migrations/0002_initial.py similarity index 62% rename from src/etools/applications/funds/migrations/0002_auto_20180326_1605.py rename to src/etools/applications/funds/migrations/0002_initial.py index 1cc9c9717f..11ac18d7b0 100644 --- a/src/etools/applications/funds/migrations/0002_auto_20180326_1605.py +++ b/src/etools/applications/funds/migrations/0002_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -17,25 +17,23 @@ class Migration(migrations.Migration): migrations.AddField( model_name='fundsreservationheader', name='intervention', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='frs', to='partners.Intervention', verbose_name='Reference Number'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='frs', to='partners.intervention', verbose_name='Reference Number'), ), migrations.AddField( model_name='fundscommitmentitem', name='fund_commitment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fc_items', - to='funds.FundsCommitmentHeader', verbose_name='Fund Commitment'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fc_items', to='funds.fundscommitmentheader', verbose_name='Fund Commitment'), ), migrations.AlterUniqueTogether( name='fundsreservationitem', - unique_together=set([('fund_reservation', 'line_item')]), + unique_together={('fund_reservation', 'line_item')}, ), migrations.AlterUniqueTogether( name='fundsreservationheader', - unique_together=set([('vendor_code', 'fr_number')]), + unique_together={('vendor_code', 'fr_number')}, ), migrations.AlterUniqueTogether( name='fundscommitmentitem', - unique_together=set([('fund_commitment', 'line_item')]), + unique_together={('fund_commitment', 'line_item')}, ), ] diff --git a/src/etools/applications/funds/migrations/0003_auto_20180329_1154.py b/src/etools/applications/funds/migrations/0003_auto_20180329_1154.py deleted file mode 100644 index 90f1fd9810..0000000000 --- a/src/etools/applications/funds/migrations/0003_auto_20180329_1154.py +++ /dev/null @@ -1,75 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-29 11:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0002_auto_20180326_1605'), - ] - - operations = [ - migrations.AlterField( - model_name='fundscommitmentitem', - name='amount_changed', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Changed'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='commitment_amount', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='commitment_amount_dc', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount DC'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='actual_amt', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Actual Cash Transfer'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='actual_amt_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, - verbose_name='Actual Cash Transfer Local'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='intervention_amt', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Current FR Amount'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='outstanding_amt', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Outstanding DCT'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='outstanding_amt_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, - verbose_name='Outstanding DCT Local'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='total_amt', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='FR Overall Amount'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='total_amt_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='FR Overall Amount DC'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='overall_amount', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Overall Amount'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='overall_amount_dc', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Overall Amount DC'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0004_fix_null_values.py b/src/etools/applications/funds/migrations/0004_fix_null_values.py deleted file mode 100644 index 591a43411e..0000000000 --- a/src/etools/applications/funds/migrations/0004_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0003_auto_20180329_1154'), - ] - - operations = [ - ] diff --git a/src/etools/applications/funds/migrations/0005_make_not_nullable.py b/src/etools/applications/funds/migrations/0005_make_not_nullable.py deleted file mode 100644 index fca827846f..0000000000 --- a/src/etools/applications/funds/migrations/0005_make_not_nullable.py +++ /dev/null @@ -1,123 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:33 - -from django.db import migrations, models -from etools.libraries.djangolib.fields import CurrencyField - -import etools.applications.core - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0004_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='fundscommitmentheader', - name='document_text', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Document'), - ), - migrations.AlterField( - model_name='fundscommitmentheader', - name='exchange_rate', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='Exchange Rate'), - ), - migrations.AlterField( - model_name='fundscommitmentheader', - name='fc_type', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Type'), - ), - migrations.AlterField( - model_name='fundscommitmentheader', - name='responsible_person', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Responsible'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='fc_ref_number', - field=models.CharField(blank=True, default='', max_length=30, verbose_name='Number'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='fr_number', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='FR Number'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='fund', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Fund'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='gl_account', - field=models.CharField(blank=True, default='', max_length=15, verbose_name='GL Account'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='grant_number', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='Grant Number'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='line_item_text', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Description'), - ), - migrations.AlterField( - model_name='fundscommitmentitem', - name='wbs', - field=models.CharField(blank=True, default='', max_length=30, verbose_name='WBS'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='document_text', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Document Text'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='fr_type', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Type'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='fr_ref_number', - field=models.CharField(blank=True, default='', max_length=30, verbose_name='Item Number'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='fund', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Fund'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='grant_number', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='Grant Number'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='line_item_text', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Description'), - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='wbs', - field=models.CharField(blank=True, default='', max_length=30, verbose_name='WBS'), - ), - migrations.AlterField( - model_name='grant', - name='description', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Description'), - ), - migrations.AlterField( - model_name='fundscommitmentheader', - name='currency', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('YER1', 'YER1'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ( - 'SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRO', 'MRO'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=50, verbose_name='Currency'), - ), - migrations.AlterField( - model_name='fundsreservationheader', - name='currency', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('YER1', 'YER1'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ( - 'SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRO', 'MRO'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=50, verbose_name='Currency'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0006_fundsreservationheader_multi_curr_flag.py b/src/etools/applications/funds/migrations/0006_fundsreservationheader_multi_curr_flag.py deleted file mode 100644 index 2e82f854a8..0000000000 --- a/src/etools/applications/funds/migrations/0006_fundsreservationheader_multi_curr_flag.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-17 15:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0005_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='fundsreservationheader', - name='multi_curr_flag', - field=models.BooleanField(default=False, verbose_name='Actual and DCT in various currencies'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0007_auto_20180418_1830.py b/src/etools/applications/funds/migrations/0007_auto_20180418_1830.py deleted file mode 100644 index 057a2b83ff..0000000000 --- a/src/etools/applications/funds/migrations/0007_auto_20180418_1830.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-18 18:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0006_fundsreservationheader_multi_curr_flag'), - ] - - operations = [ - migrations.AlterField( - model_name='fundscommitmentheader', - name='responsible_person', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Responsible'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0008_fundsreservationitem_donor.py b/src/etools/applications/funds/migrations/0008_fundsreservationitem_donor.py deleted file mode 100644 index fde4c67a07..0000000000 --- a/src/etools/applications/funds/migrations/0008_fundsreservationitem_donor.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-15 14:52 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0007_auto_20180418_1830'), - ] - - operations = [ - migrations.AddField( - model_name='fundsreservationitem', - name='donor', - field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Donor Name'), - ), - migrations.AddField( - model_name='fundsreservationitem', - name='donor_code', - field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Donor Code'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0009_auto_20180515_1720.py b/src/etools/applications/funds/migrations/0009_auto_20180515_1720.py deleted file mode 100644 index a139a39be8..0000000000 --- a/src/etools/applications/funds/migrations/0009_auto_20180515_1720.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-15 17:20 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0008_fundsreservationitem_donor'), - ] - - operations = [ - migrations.AlterModelOptions( - name='fundsreservationitem', - options={'ordering': ('line_item',)}, - ), - migrations.AlterField( - model_name='fundsreservationitem', - name='line_item', - field=models.PositiveSmallIntegerField(verbose_name='Line Item'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0010_fundsreservationheader_completed_flag.py b/src/etools/applications/funds/migrations/0010_fundsreservationheader_completed_flag.py deleted file mode 100644 index 48501a6518..0000000000 --- a/src/etools/applications/funds/migrations/0010_fundsreservationheader_completed_flag.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.1 on 2019-05-23 19:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0009_auto_20180515_1720'), - ] - - operations = [ - migrations.AddField( - model_name='fundsreservationheader', - name='completed_flag', - field=models.BooleanField(default=False, verbose_name='FR marked as completed in Vision'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0011_fundsreservationheader_delegated.py b/src/etools/applications/funds/migrations/0011_fundsreservationheader_delegated.py deleted file mode 100644 index a41b4d0f8e..0000000000 --- a/src/etools/applications/funds/migrations/0011_fundsreservationheader_delegated.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.1 on 2019-06-18 20:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0010_fundsreservationheader_completed_flag'), - ] - - operations = [ - migrations.AddField( - model_name='fundsreservationheader', - name='delegated', - field=models.BooleanField(default=False, verbose_name='FR delegated from another CO'), - ), - ] diff --git a/src/etools/applications/funds/migrations/0012_alter_fundsreservationitem_line_item_text.py b/src/etools/applications/funds/migrations/0012_alter_fundsreservationitem_line_item_text.py deleted file mode 100644 index 84cb438fc3..0000000000 --- a/src/etools/applications/funds/migrations/0012_alter_fundsreservationitem_line_item_text.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2 on 2021-08-05 01:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funds', '0011_fundsreservationheader_delegated'), - ] - - operations = [ - migrations.AlterField( - model_name='fundsreservationitem', - name='line_item_text', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Description'), - ), - ] diff --git a/src/etools/applications/hact/migrations/0001_initial.py b/src/etools/applications/hact/migrations/0001_initial.py index 945d1c3452..39f4887de8 100644 --- a/src/etools/applications/hact/migrations/0001_initial.py +++ b/src/etools/applications/hact/migrations/0001_initial.py @@ -1,12 +1,11 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.utils.timezone from django.db import migrations, models - +import django.utils.timezone +import etools.libraries.pythonlib.datetime +import etools.libraries.pythonlib.encoders import model_utils.fields -import etools.applications.core.urlresolvers - class Migration(migrations.Migration): @@ -20,30 +19,23 @@ class Migration(migrations.Migration): name='AggregateHact', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('year', models.IntegerField( - default=etools.libraries.pythonlib.datetime.get_current_year, unique=True, verbose_name='Year')), - ('partner_values', models.JSONField(encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, - blank=True, null=True, verbose_name='Partner Values')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('year', models.IntegerField(default=etools.libraries.pythonlib.datetime.get_current_year, unique=True, verbose_name='Year')), + ('partner_values', models.JSONField(blank=True, encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, null=True, verbose_name='Partner Values')), ], options={ - 'abstract': False, + 'verbose_name_plural': 'Aggregate hact', }, ), migrations.CreateModel( name='HactHistory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('year', models.IntegerField(default=etools.libraries.pythonlib.datetime.get_current_year, verbose_name='Year')), - ('partner_values', models.JSONField(encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, - blank=True, null=True, verbose_name='Partner Values')), + ('partner_values', models.JSONField(blank=True, encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, null=True, verbose_name='Partner Values')), ], options={ 'verbose_name_plural': 'Hact Histories', diff --git a/src/etools/applications/hact/migrations/0002_auto_20180326_1605.py b/src/etools/applications/hact/migrations/0002_initial.py similarity index 67% rename from src/etools/applications/hact/migrations/0002_auto_20180326_1605.py rename to src/etools/applications/hact/migrations/0002_initial.py index 79d583e12b..d3324bb929 100644 --- a/src/etools/applications/hact/migrations/0002_auto_20180326_1605.py +++ b/src/etools/applications/hact/migrations/0002_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -9,19 +9,18 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('hact', '0001_initial'), ('partners', '0001_initial'), + ('hact', '0001_initial'), ] operations = [ migrations.AddField( model_name='hacthistory', name='partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='related_partner', to='partners.PartnerOrganization', verbose_name='Partner'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_partner', to='partners.partnerorganization', verbose_name='Partner'), ), migrations.AlterUniqueTogether( name='hacthistory', - unique_together=set([('partner', 'year')]), + unique_together={('partner', 'year')}, ), ] diff --git a/src/etools/applications/hact/migrations/0003_auto_20190122_1412.py b/src/etools/applications/hact/migrations/0003_auto_20190122_1412.py deleted file mode 100644 index 1df8b766e3..0000000000 --- a/src/etools/applications/hact/migrations/0003_auto_20190122_1412.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-22 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('hact', '0002_auto_20180326_1605'), - ] - - operations = [ - migrations.AlterModelOptions( - name='aggregatehact', - options={'verbose_name_plural': 'Aggregate hact'}, - ), - ] diff --git a/src/etools/applications/last_mile/migrations/0001_initial.py b/src/etools/applications/last_mile/migrations/0001_initial.py index d67b94c2b4..5424d35bdf 100644 --- a/src/etools/applications/last_mile/migrations/0001_initial.py +++ b/src/etools/applications/last_mile/migrations/0001_initial.py @@ -1,10 +1,10 @@ -# Generated by Django 3.2.19 on 2024-04-12 21:26 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -from django.conf import settings import django.contrib.gis.db.models.fields from django.db import migrations, models import django.db.models.deletion import django.utils.timezone +import etools.applications.utils.validators import model_utils.fields @@ -13,9 +13,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0121_auto_20230814_1058'), - ('locations', '0001_initial'), ] operations = [ @@ -27,7 +24,7 @@ class Migration(migrations.Migration): ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('wastage_type', models.CharField(choices=[('DAMAGED', 'Damaged'), ('STOLEN', 'Stolen'), ('EXPIRED', 'Expired'), ('LOST', 'Lost')], max_length=30, null=True)), ('uom', models.CharField(choices=[('BAG', 'BAG'), ('BOT', 'BOT'), ('BOX', 'BOX'), ('CAR', 'CAR'), ('DRM', 'DRM'), ('DZ', 'DZ'), ('EA', 'EA'), ('KG', 'KG'), ('L', 'L'), ('M', 'M'), ('PAA', 'PAA'), ('PAC', 'PAC'), ('RM', 'RM'), ('ROL', 'ROL'), ('SET', 'SET'), ('TBE', 'TBE'), ('TO', 'TO'), ('VL', 'VL')], max_length=30, null=True)), - ('conversion_factor', models.IntegerField(null=True)), + ('conversion_factor', models.DecimalField(decimal_places=2, max_digits=10, null=True)), ('quantity', models.IntegerField()), ('batch_id', models.CharField(blank=True, max_length=255, null=True)), ('expiry_date', models.DateTimeField(blank=True, null=True)), @@ -41,10 +38,18 @@ class Migration(migrations.Migration): ('other', models.JSONField(blank=True, null=True, verbose_name='Other Details')), ], options={ - 'ordering': ('-id',), + 'ordering': ('expiry_date',), 'base_manager_name': 'objects', }, ), + migrations.CreateModel( + name='ItemTransferHistory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ], + ), migrations.CreateModel( name='Material', fields=[ @@ -65,11 +70,21 @@ class Migration(migrations.Migration): ('temperature_conditions', models.CharField(blank=True, max_length=100, null=True)), ('temperature_group', models.CharField(blank=True, max_length=100, null=True)), ('purchasing_text', models.TextField(blank=True, null=True)), + ('other', models.JSONField(blank=True, null=True, validators=[etools.applications.utils.validators.JSONSchemaValidator(json_schema={'additionalProperties': True, 'properties': {'uom_map': {'additionalProperties': {'type': 'number'}, 'propertyNames': {'enum': ['BAG', 'BOT', 'BOX', 'CAR', 'DRM', 'DZ', 'EA', 'KG', 'L', 'M', 'PAA', 'PAC', 'RM', 'ROL', 'SET', 'TBE', 'TO', 'VL']}, 'type': 'object'}}, 'title': "Json schema for item 'other' field", 'type': 'object'})], verbose_name='Other Details')), ], options={ 'abstract': False, }, ), + migrations.CreateModel( + name='PartnerMaterial', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('description', models.CharField(max_length=255)), + ], + ), migrations.CreateModel( name='PointOfInterest', fields=[ @@ -77,14 +92,12 @@ class Migration(migrations.Migration): ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=254, verbose_name='Name')), - ('p_code', models.CharField(blank=True, default='', max_length=32, verbose_name='P Code')), + ('p_code', models.CharField(max_length=32, unique=True, verbose_name='P Code')), ('description', models.CharField(max_length=254, verbose_name='Description')), ('other', models.JSONField(blank=True, null=True, verbose_name='Other Details')), ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point')), ('private', models.BooleanField(default=False)), ('is_active', models.BooleanField(default=True, verbose_name='Active')), - ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='points_of_interest', to='locations.location', verbose_name='Parent Location')), - ('partner_organizations', models.ManyToManyField(blank=True, related_name='points_of_interest', to='partners.PartnerOrganization')), ], options={ 'verbose_name': 'Point of Interest', @@ -112,7 +125,7 @@ class Migration(migrations.Migration): ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('unicef_release_order', models.CharField(max_length=30, null=True, unique=True)), ('name', models.CharField(blank=True, max_length=255, null=True)), - ('transfer_type', models.CharField(blank=True, choices=[('DELIVERY', 'Delivery'), ('DISTRIBUTION', 'Distribution'), ('WASTAGE', 'Wastage')], max_length=30, null=True)), + ('transfer_type', models.CharField(blank=True, choices=[('DELIVERY', 'Delivery'), ('DISTRIBUTION', 'Distribution'), ('HANDOVER', 'Handover'), ('WASTAGE', 'Wastage')], max_length=30, null=True)), ('transfer_subtype', models.CharField(blank=True, choices=[('SHORT', 'Short'), ('SURPLUS', 'Surplus')], max_length=30, null=True)), ('status', models.CharField(choices=[('PENDING', 'Pending'), ('COMPLETED', 'Completed')], default='PENDING', max_length=30)), ('origin_check_out_at', models.DateTimeField(blank=True, null=True)), @@ -123,67 +136,22 @@ class Migration(migrations.Migration): ('purchase_order_id', models.CharField(blank=True, max_length=255, null=True)), ('waybill_id', models.CharField(blank=True, max_length=255, null=True)), ('pd_number', models.CharField(blank=True, max_length=255, null=True)), - ('checked_in_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_checked_in', to=settings.AUTH_USER_MODEL)), - ('checked_out_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_checked_out', to=settings.AUTH_USER_MODEL)), - ('destination_point', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='destination_transfers', to='last_mile.pointofinterest')), - ('origin_point', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='origin_transfers', to='last_mile.pointofinterest')), - ('origin_transfer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='following_transfers', to='last_mile.transfer')), - ('partner_organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='partners.partnerorganization')), ], options={ 'ordering': ('-id',), }, ), - migrations.AddField( - model_name='pointofinterest', - name='poi_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='points_of_interest', to='last_mile.pointofinteresttype', verbose_name='Type'), - ), - migrations.CreateModel( - name='PartnerMaterial', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('description', models.CharField(max_length=255)), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partner_material', to='last_mile.material')), - ('partner_organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partner_material', to='partners.partnerorganization')), - ], - options={ - 'unique_together': {('partner_organization', 'material')}, - }, - ), - migrations.AddField( - model_name='material', - name='partner_materials', - field=models.ManyToManyField(through='last_mile.PartnerMaterial', to='partners.PartnerOrganization'), - ), migrations.CreateModel( - name='ItemTransferHistory', + name='TransferEvidence', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='last_mile.item')), - ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='last_mile.transfer')), + ('comment', models.TextField(blank=True, null=True)), + ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_evidences', to='last_mile.transfer')), ], options={ - 'unique_together': {('transfer', 'item')}, + 'ordering': ('-created',), }, ), - migrations.AddField( - model_name='item', - name='material', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='last_mile.material'), - ), - migrations.AddField( - model_name='item', - name='transfer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='items', to='last_mile.transfer'), - ), - migrations.AddField( - model_name='item', - name='transfers_history', - field=models.ManyToManyField(through='last_mile.ItemTransferHistory', to='last_mile.Transfer'), - ), ] diff --git a/src/etools/applications/last_mile/migrations/0002_auto_20240426_1157.py b/src/etools/applications/last_mile/migrations/0002_auto_20240426_1157.py deleted file mode 100644 index 0340d6e8f7..0000000000 --- a/src/etools/applications/last_mile/migrations/0002_auto_20240426_1157.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.19 on 2024-04-26 11:57 - -from django.db import migrations, models -import etools.applications.utils.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('last_mile', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='material', - name='other', - field=models.JSONField(blank=True, null=True, validators=[ - etools.applications.utils.validators.JSONSchemaValidator(json_schema={'additionalProperties': True, 'properties': {'uom_map': {'additionalProperties': {'type': 'number'}, 'propertyNames': {'enum': ['BAG', 'BOT', 'BOX', 'CAR', 'DRM', 'DZ', 'EA', 'KG', 'L', 'M', 'PAA', 'PAC', 'RM', 'ROL', 'SET', 'TBE', 'TO', 'VL']}, 'type': 'object'}}, 'title': "Json schema for item 'other' field", 'type': 'object'})], verbose_name='Other Details'), - ), - migrations.AlterField( - model_name='item', - name='conversion_factor', - field=models.DecimalField(decimal_places=2, max_digits=10, null=True), - ), - ] diff --git a/src/etools/applications/last_mile/migrations/0002_initial.py b/src/etools/applications/last_mile/migrations/0002_initial.py new file mode 100644 index 0000000000..01c83ce05e --- /dev/null +++ b/src/etools/applications/last_mile/migrations/0002_initial.py @@ -0,0 +1,118 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('last_mile', '0001_initial'), + ('partners', '0001_initial'), + ('locations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='transferevidence', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_evidences', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='transfer', + name='checked_in_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_checked_in', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='transfer', + name='checked_out_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_checked_out', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='transfer', + name='destination_point', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='destination_transfers', to='last_mile.pointofinterest'), + ), + migrations.AddField( + model_name='transfer', + name='origin_point', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='origin_transfers', to='last_mile.pointofinterest'), + ), + migrations.AddField( + model_name='transfer', + name='origin_transfer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='following_transfers', to='last_mile.transfer'), + ), + migrations.AddField( + model_name='transfer', + name='partner_organization', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='partners.partnerorganization'), + ), + migrations.AddField( + model_name='pointofinterest', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='points_of_interest', to='locations.location', verbose_name='Parent Location'), + ), + migrations.AddField( + model_name='pointofinterest', + name='partner_organizations', + field=models.ManyToManyField(blank=True, related_name='points_of_interest', to='partners.PartnerOrganization'), + ), + migrations.AddField( + model_name='pointofinterest', + name='poi_type', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='points_of_interest', to='last_mile.pointofinteresttype', verbose_name='Type'), + ), + migrations.AddField( + model_name='partnermaterial', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partner_material', to='last_mile.material'), + ), + migrations.AddField( + model_name='partnermaterial', + name='partner_organization', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partner_material', to='partners.partnerorganization'), + ), + migrations.AddField( + model_name='material', + name='partner_materials', + field=models.ManyToManyField(through='last_mile.PartnerMaterial', to='partners.PartnerOrganization'), + ), + migrations.AddField( + model_name='itemtransferhistory', + name='item', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='last_mile.item'), + ), + migrations.AddField( + model_name='itemtransferhistory', + name='transfer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='last_mile.transfer'), + ), + migrations.AddField( + model_name='item', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='last_mile.material'), + ), + migrations.AddField( + model_name='item', + name='transfer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='items', to='last_mile.transfer'), + ), + migrations.AddField( + model_name='item', + name='transfers_history', + field=models.ManyToManyField(through='last_mile.ItemTransferHistory', to='last_mile.Transfer'), + ), + migrations.AlterUniqueTogether( + name='partnermaterial', + unique_together={('partner_organization', 'material')}, + ), + migrations.AlterUniqueTogether( + name='itemtransferhistory', + unique_together={('transfer', 'item')}, + ), + ] diff --git a/src/etools/applications/last_mile/migrations/0003_alter_pointofinterest_p_code.py b/src/etools/applications/last_mile/migrations/0003_alter_pointofinterest_p_code.py deleted file mode 100644 index 687a515ec1..0000000000 --- a/src/etools/applications/last_mile/migrations/0003_alter_pointofinterest_p_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2024-05-17 08:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('last_mile', '0002_auto_20240426_1157'), - ] - - operations = [ - migrations.AlterField( - model_name='pointofinterest', - name='p_code', - field=models.CharField(max_length=32, unique=True, verbose_name='P Code'), - ), - ] diff --git a/src/etools/applications/last_mile/migrations/0004_alter_item_options.py b/src/etools/applications/last_mile/migrations/0004_alter_item_options.py deleted file mode 100644 index 44e73892b6..0000000000 --- a/src/etools/applications/last_mile/migrations/0004_alter_item_options.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.19 on 2024-06-17 09:16 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('last_mile', '0003_alter_pointofinterest_p_code'), - ] - - operations = [ - migrations.AlterModelOptions( - name='item', - options={'base_manager_name': 'objects', 'ordering': ('expiry_date',)}, - ), - ] diff --git a/src/etools/applications/last_mile/migrations/0005_auto_20240621_0845.py b/src/etools/applications/last_mile/migrations/0005_auto_20240621_0845.py deleted file mode 100644 index bb1a1d6ffc..0000000000 --- a/src/etools/applications/last_mile/migrations/0005_auto_20240621_0845.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.19 on 2024-06-21 10:19 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('last_mile', '0004_alter_item_options'), - ] - - operations = [ - migrations.AlterField( - model_name='transfer', - name='transfer_type', - field=models.CharField(blank=True, choices=[('DELIVERY', 'Delivery'), ('DISTRIBUTION', 'Distribution'), ('HANDOVER', 'Handover'), ('WASTAGE', 'Wastage')], max_length=30, null=True), - ), - migrations.CreateModel( - name='TransferEvidence', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('comment', models.TextField(blank=True, null=True)), - ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_evidences', to='last_mile.transfer')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_evidences', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ('-created',), - }, - ), - ] diff --git a/src/etools/applications/locations/migrations/0001_initial.py b/src/etools/applications/locations/migrations/0001_initial.py index c90d6aff4f..d40ca49931 100644 --- a/src/etools/applications/locations/migrations/0001_initial.py +++ b/src/etools/applications/locations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.6 on 2022-02-24 00:35 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import django.contrib.gis.db.models.fields from django.db import migrations, models @@ -19,34 +19,23 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Location', fields=[ - ('id', - models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=254, verbose_name='Name')), ('admin_level', models.SmallIntegerField(blank=True, null=True, verbose_name='Admin Level')), - ('admin_level_name', - models.CharField(blank=True, max_length=64, null=True, verbose_name='Admin Level Name')), + ('admin_level_name', models.CharField(blank=True, max_length=64, null=True, verbose_name='Admin Level Name')), ('latitude', models.FloatField(blank=True, null=True, verbose_name='Latitude')), ('longitude', models.FloatField(blank=True, null=True, verbose_name='Longitude')), ('p_code', models.CharField(blank=True, default='', max_length=32, verbose_name='P Code')), - ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, - verbose_name='Geo Point')), - ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, - verbose_name='Point')), + ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Geo Point')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point')), ('is_active', models.BooleanField(blank=True, default=True, verbose_name='Active')), - ('created', - model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', - model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('lft', models.PositiveIntegerField(editable=False)), ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(editable=False)), - ('parent', - mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='children', to='locations.location', - verbose_name='Parent')), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='locations.location', verbose_name='Parent')), ], options={ 'ordering': ['name'], diff --git a/src/etools/applications/management/migrations/0001_initial.py b/src/etools/applications/management/migrations/0001_initial.py index 6bf5ab852f..fee0c356c6 100644 --- a/src/etools/applications/management/migrations/0001_initial.py +++ b/src/etools/applications/management/migrations/0001_initial.py @@ -1,7 +1,8 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models +import django.utils.timezone +import model_utils.fields class Migration(migrations.Migration): @@ -9,26 +10,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), ] operations = [ migrations.CreateModel( - name='FlaggedIssue', + name='SectionHistory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('object_id', models.PositiveIntegerField(db_index=True, verbose_name='Object ID')), - ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), - ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Updated Date')), - ('issue_category', models.CharField(choices=[('data', 'Data Issue'), ( - 'compliance', 'Compliance Issue')], db_index=True, default='data', max_length=32, verbose_name='Issue Category')), - ('issue_status', models.CharField(choices=[('new', 'New (untriaged)'), ('pending', 'Pending (triaged, not resolved)'), ( - 'reactivated', 'Reactivated (was resolved but not fixed)'), ('resolved', 'Resolved')], db_index=True, default='new', max_length=32, verbose_name='Issue Status')), - ('issue_id', models.CharField(db_index=True, - help_text='A readable ID associated with the specific issue, e.g. "pca-no-attachment"', max_length=100, verbose_name='Issue ID')), - ('message', models.TextField(verbose_name='Message')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='contenttypes.ContentType', verbose_name='Content Type')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('history_type', models.CharField(choices=[('create', 'Create'), ('merge', 'Merge'), ('close', 'Close')], max_length=10, verbose_name='Name')), ], + options={ + 'abstract': False, + }, ), ] diff --git a/src/etools/applications/management/migrations/0002_auto_20190326_1500.py b/src/etools/applications/management/migrations/0002_auto_20190326_1500.py deleted file mode 100644 index 4dfee07928..0000000000 --- a/src/etools/applications/management/migrations/0002_auto_20190326_1500.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-26 15:00 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='flaggedissue', - name='content_type', - ), - migrations.DeleteModel( - name='FlaggedIssue', - ), - ] diff --git a/src/etools/applications/management/migrations/0002_initial.py b/src/etools/applications/management/migrations/0002_initial.py new file mode 100644 index 0000000000..b1357924e4 --- /dev/null +++ b/src/etools/applications/management/migrations/0002_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('management', '0001_initial'), + ('reports', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='sectionhistory', + name='from_sections', + field=models.ManyToManyField(blank=True, related_name='history_from', to='reports.Section', verbose_name='From'), + ), + migrations.AddField( + model_name='sectionhistory', + name='to_sections', + field=models.ManyToManyField(blank=True, related_name='history_to', to='reports.Section', verbose_name='To'), + ), + ] diff --git a/src/etools/applications/management/migrations/0003_sectionhistory.py b/src/etools/applications/management/migrations/0003_sectionhistory.py deleted file mode 100644 index ef6e508596..0000000000 --- a/src/etools/applications/management/migrations/0003_sectionhistory.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-09 19:39 - -from django.db import migrations, models -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('reports', '0018_section_active'), - ('management', '0002_auto_20190326_1500'), - ] - - operations = [ - migrations.CreateModel( - name='SectionHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('history_type', models.CharField(max_length=500, verbose_name='Name')), - ('permission_type', models.CharField(choices=[('create', 'Create'), ('merge', 'Merge'), ('split', 'Split'), ('close', 'Close')], max_length=10)), - ('from_sections', models.ManyToManyField(blank=True, related_name='history_from', to='reports.Section', verbose_name='From')), - ('to_sections', models.ManyToManyField(blank=True, related_name='history_to', to='reports.Section', verbose_name='To')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/etools/applications/management/migrations/0004_auto_20190715_2047.py b/src/etools/applications/management/migrations/0004_auto_20190715_2047.py deleted file mode 100644 index e64688d940..0000000000 --- a/src/etools/applications/management/migrations/0004_auto_20190715_2047.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-15 20:47 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0003_sectionhistory'), - ] - - operations = [ - migrations.RemoveField( - model_name='sectionhistory', - name='permission_type', - ), - migrations.AlterField( - model_name='sectionhistory', - name='history_type', - field=models.CharField(choices=[('create', 'Create'), ('merge', 'Merge'), ('split', 'Split'), ('close', 'Close')], max_length=10, verbose_name='Name'), - ), - ] diff --git a/src/etools/applications/management/migrations/0005_auto_20190806_1400.py b/src/etools/applications/management/migrations/0005_auto_20190806_1400.py deleted file mode 100644 index 84d0e15bd8..0000000000 --- a/src/etools/applications/management/migrations/0005_auto_20190806_1400.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-06 14:00 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0004_auto_20190715_2047'), - ] - - operations = [ - migrations.AlterField( - model_name='sectionhistory', - name='history_type', - field=models.CharField(choices=[('create', 'Create'), ('merge', 'Merge'), ('close', 'Close')], max_length=10, verbose_name='Name'), - ), - ] diff --git a/src/etools/applications/organizations/migrations/0001_initial.py b/src/etools/applications/organizations/migrations/0001_initial.py index 04912ec26d..d0d365987b 100644 --- a/src/etools/applications/organizations/migrations/0001_initial.py +++ b/src/etools/applications/organizations/migrations/0001_initial.py @@ -1,15 +1,11 @@ -# Generated by Django 3.2.6 on 2022-07-19 10:39 -from django.core.management import call_command +# Generated by Django 3.2.19 on 2024-07-19 11:57 + from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import model_utils.fields -def init_organizations(apps, schema_editor): - call_command('loaddata', 'organizations') - - class Migration(migrations.Migration): initial = True @@ -26,8 +22,8 @@ class Migration(migrations.Migration): ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Vendor Name')), ('vendor_number', models.CharField(max_length=30, unique=True, verbose_name='Vendor Number')), - ('organization_type', models.CharField(blank=True, null=True, choices=[('Bilateral / Multilateral', 'Bilateral / Multilateral'), ('Civil Society Organization', 'Civil Society Organization'), ('Government', 'Government'), ('UN Agency', 'UN Agency')], max_length=50, verbose_name='Organization Type')), - ('cso_type', models.CharField(blank=True, choices=[('International', 'International'), ('National', 'National'), ('Community Based Organization', 'Community Based Organization'), ('Academic Institution', 'Academic Institution')], max_length=50, null=True, verbose_name='CSO Type')), + ('organization_type', models.CharField(blank=True, choices=[('Bilateral / Multilateral', 'Bilateral / Multilateral'), ('Civil Society Organization', 'Civil Society Organization'), ('Government', 'Government'), ('UN Agency', 'UN Agency')], max_length=50, null=True, verbose_name='Organization Type')), + ('cso_type', models.CharField(blank=True, choices=[('International', 'International'), ('National', 'National'), ('Community Based Organization', 'Community Based Organization'), ('Academic Institution', 'Academic Institution'), ('Red Cross/Red Crescent National Societies', 'Red Cross/Red Crescent National Societies')], max_length=50, null=True, verbose_name='CSO Type')), ('short_name', models.CharField(blank=True, max_length=50, null=True, verbose_name='Short Name')), ('other', models.JSONField(blank=True, null=True, verbose_name='Other Details')), ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='organizations.organization', verbose_name='Parent Organization')), @@ -39,5 +35,4 @@ class Migration(migrations.Migration): 'unique_together': {('name', 'vendor_number')}, }, ), - migrations.RunPython(init_organizations, migrations.RunPython.noop) ] diff --git a/src/etools/applications/organizations/migrations/0002_alter_organization_cso_type.py b/src/etools/applications/organizations/migrations/0002_alter_organization_cso_type.py deleted file mode 100644 index a1ed6f48a6..0000000000 --- a/src/etools/applications/organizations/migrations/0002_alter_organization_cso_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2023-01-18 14:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='organization', - name='cso_type', - field=models.CharField(blank=True, choices=[('International', 'International'), ('National', 'National'), ('Community Based Organization', 'Community Based Organization'), ('Academic Institution', 'Academic Institution'), ('Red Cross/Red Crescent National Societies', 'Red Cross/Red Crescent National Societies')], max_length=50, null=True, verbose_name='CSO Type'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0001_initial.py b/src/etools/applications/partners/migrations/0001_initial.py index c78c1a8199..58511e06c5 100644 --- a/src/etools/applications/partners/migrations/0001_initial.py +++ b/src/etools/applications/partners/migrations/0001_initial.py @@ -1,17 +1,17 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import django.contrib.postgres.fields +import django.core.validators +from django.db import migrations, models import django.db.models.deletion +import django.db.models.manager import django.utils.timezone -from django.db import migrations, models - import django_fsm -import model_utils.fields -from unicef_djangolib.fields import QuarterField - -from etools.libraries.djangolib.fields import CurrencyField -import etools.applications.core.urlresolvers import etools.applications.partners.models +import etools.libraries.djangolib.fields +import etools.libraries.pythonlib.datetime +import etools.libraries.pythonlib.encoders +import model_utils.fields class Migration(migrations.Migration): @@ -19,8 +19,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), ] operations = [ @@ -28,46 +26,42 @@ class Migration(migrations.Migration): name='Agreement', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('agreement_type', models.CharField(choices=[('PCA', 'Programme Cooperation Agreement'), ( - 'SSFA', 'Small Scale Funding Agreement'), ('MOU', 'Memorandum of Understanding')], max_length=10, verbose_name='Agreement Type')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('agreement_type', models.CharField(choices=[('PCA', 'Programme Cooperation Agreement'), ('SSFA', 'Small Scale Funding Agreement'), ('MOU', 'Memorandum of Understanding')], max_length=10, verbose_name='Agreement Type')), ('agreement_number', models.CharField(blank=True, max_length=45, unique=True, verbose_name='Reference Number')), - ('attached_agreement', models.FileField(blank=True, max_length=1024, - upload_to=etools.applications.partners.models.get_agreement_path, verbose_name='Attached Agreement')), + ('attached_agreement', models.FileField(blank=True, max_length=1024, upload_to=etools.applications.partners.models.get_agreement_path, verbose_name='Attached Agreement')), ('start', models.DateField(blank=True, null=True, verbose_name='Start Date')), ('end', models.DateField(blank=True, null=True, verbose_name='End Date')), + ('reference_number_year', models.IntegerField()), + ('special_conditions_pca', models.BooleanField(default=False, verbose_name='Special Conditions PCA')), ('signed_by_unicef_date', models.DateField(blank=True, null=True, verbose_name='Signed By UNICEF Date')), ('signed_by_partner_date', models.DateField(blank=True, null=True, verbose_name='Signed By Partner Date')), - ('status', django_fsm.FSMField(blank=True, choices=[('draft', 'Draft'), ('signed', 'Signed'), ('ended', 'Ended'), ( - 'suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status')), + ('status', django_fsm.FSMField(blank=True, choices=[('draft', 'Draft'), ('signed', 'Signed'), ('ended', 'Ended'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status')), ], options={ 'ordering': ['-created'], }, managers=[ ('view_objects', django.db.models.manager.Manager()), + ('objects', etools.applications.partners.models.MainAgreementManager()), ], ), migrations.CreateModel( name='AgreementAmendment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('number', models.CharField(max_length=5, verbose_name='Number')), - ('signed_amendment', models.FileField(blank=True, max_length=1024, null=True, - upload_to=etools.applications.partners.models.get_agreement_amd_file_path, verbose_name='Signed Amendment')), - ('types', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('Change IP name', 'Change in Legal Name of Implementing Partner'), ( - 'Change authorized officer', 'Change Authorized Officer(s)'), ('Change banking info', 'Banking Information'), ('Change in clause', 'Change in clause')], max_length=50, verbose_name='Types'), size=None)), + ('signed_amendment', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_agreement_amd_file_path, verbose_name='Signed Amendment')), + ('types', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('Change IP name', 'Change in Legal Name of Implementing Partner'), ('Change authorized officer', 'Change Authorized Officer(s)'), ('Change banking info', 'Banking Information'), ('Change in clause', 'Change in clause')], max_length=50, verbose_name='Types'), size=None)), ('signed_date', models.DateField(blank=True, null=True, verbose_name='Signed Date')), ], options={ - 'abstract': False, + 'verbose_name': 'Amendment', + 'verbose_name_plural': 'Agreement amendments', + 'ordering': ('-created',), }, managers=[ ('view_objects', django.db.models.manager.Manager()), @@ -77,114 +71,117 @@ class Migration(migrations.Migration): name='Assessment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('type', models.CharField(choices=[('Micro Assessment', 'Micro Assessment'), ('Simplified Checklist', 'Simplified Checklist'), ( - 'Scheduled Audit report', 'Scheduled Audit report'), ('Special Audit report', 'Special Audit report'), ('Other', 'Other')], max_length=50, verbose_name='Type')), - ('names_of_other_agencies', models.CharField(blank=True, help_text='List the names of the other agencies they have worked with', - max_length=255, null=True, verbose_name='Other Agencies')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('type', models.CharField(choices=[('Micro Assessment', 'Micro Assessment'), ('Simplified Checklist', 'Simplified Checklist'), ('Scheduled Audit report', 'Scheduled Audit report'), ('Special Audit report', 'Special Audit report'), ('Other', 'Other')], max_length=50, verbose_name='Type')), + ('names_of_other_agencies', models.CharField(blank=True, help_text='List the names of the other agencies they have worked with', max_length=255, null=True, verbose_name='Other Agencies')), ('expected_budget', models.IntegerField(blank=True, null=True, verbose_name='Planned amount')), - ('notes', models.CharField(blank=True, help_text='Note any special requests to be considered during the assessment', - max_length=255, null=True, verbose_name='Special requests')), + ('notes', models.CharField(blank=True, help_text='Note any special requests to be considered during the assessment', max_length=255, null=True, verbose_name='Special requests')), ('requested_date', models.DateField(auto_now_add=True, verbose_name='Requested Date')), ('planned_date', models.DateField(blank=True, null=True, verbose_name='Planned Date')), ('completed_date', models.DateField(blank=True, null=True, verbose_name='Completed Date')), - ('rating', models.CharField(choices=[('high', 'High'), ('significant', 'Significant'), ( - 'medium', 'Medium'), ('low', 'Low')], default='high', max_length=50, verbose_name='Rating')), - ('report', models.FileField(blank=True, max_length=1024, null=True, - upload_to=etools.applications.partners.models.get_assessment_path, verbose_name='Report')), + ('rating', models.CharField(choices=[('high', 'High'), ('significant', 'Significant'), ('medium', 'Medium'), ('low', 'Low')], default='high', max_length=50, verbose_name='Rating')), + ('report', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_assessment_path, verbose_name='Report')), ('current', models.BooleanField(default=False, verbose_name='Basis for risk rating')), + ('active', models.BooleanField(default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( - name='DirectCashTransfer', + name='CoreValuesAssessment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('fc_ref', models.CharField(max_length=50, verbose_name='Fund Commitment Reference')), - ('amount_usd', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Amount (USD)')), - ('liquidation_usd', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Liquidation (USD)')), - ('outstanding_balance_usd', models.DecimalField(decimal_places=2, - max_digits=10, verbose_name='Outstanding Balance (USD)')), - ('amount_less_than_3_Months_usd', models.DecimalField(decimal_places=2, - max_digits=10, verbose_name='Amount mess than 3 months (USD)')), - ('amount_3_to_6_months_usd', models.DecimalField(decimal_places=2, - max_digits=10, verbose_name='Amount between 3 and 6 months (USD)')), - ('amount_6_to_9_months_usd', models.DecimalField(decimal_places=2, - max_digits=10, verbose_name='Amount between 6 and 9 months (USD)')), - ('amount_more_than_9_Months_usd', models.DecimalField(decimal_places=2, - max_digits=10, verbose_name='Amount more than 9 months (USD)')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('date', models.DateField(blank=True, null=True, verbose_name='Date positively assessed against core values')), + ('assessment', models.FileField(blank=True, help_text='Only required for CSO partners', max_length=1024, null=True, upload_to='partners/core_values/', verbose_name='Core Values Assessment')), + ('archived', models.BooleanField(default=False)), ], + options={ + 'abstract': False, + }, ), migrations.CreateModel( - name='FileType', + name='DirectCashTransfer', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(choices=[('FACE', 'FACE'), ('Progress Report', 'Progress Report'), ('Partnership Review', 'Partnership Review'), ('Final Partnership Review', 'Final Partnership Review'), ( - 'Correspondence', 'Correspondence'), ('Supply/Distribution Plan', 'Supply/Distribution Plan'), ('Other', 'Other')], max_length=64, unique=True, verbose_name='Name')), + ('fc_ref', models.CharField(max_length=50, verbose_name='Fund Commitment Reference')), + ('amount_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount (USD)')), + ('liquidation_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Liquidation (USD)')), + ('outstanding_balance_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Outstanding Balance (USD)')), + ('amount_less_than_3_Months_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount less than 3 months (USD)')), + ('amount_3_to_6_months_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount between 3 and 6 months (USD)')), + ('amount_6_to_9_months_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount between 6 and 9 months (USD)')), + ('amount_more_than_9_Months_usd', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount more than 9 months (USD)')), ], ), migrations.CreateModel( - name='FundingCommitment', + name='FileType', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('start', models.DateTimeField(blank=True, null=True, verbose_name='start')), - ('end', models.DateTimeField(blank=True, null=True, verbose_name='end')), - ('fr_number', models.CharField(max_length=50, verbose_name='FR Number')), - ('wbs', models.CharField(max_length=50, verbose_name='WBS')), - ('fc_type', models.CharField(max_length=50, verbose_name='Type')), - ('fc_ref', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='Reference')), - ('fr_item_amount_usd', models.DecimalField(blank=True, decimal_places=2, - max_digits=12, null=True, verbose_name='Item Amount (USD)')), - ('agreement_amount', models.DecimalField(blank=True, decimal_places=2, - max_digits=12, null=True, verbose_name='Agreement Amount')), - ('commitment_amount', models.DecimalField(blank=True, decimal_places=2, - max_digits=12, null=True, verbose_name='Commitment Amount')), - ('expenditure_amount', models.DecimalField(blank=True, decimal_places=2, - max_digits=12, null=True, verbose_name='Expenditure Amount')), + ('name', models.CharField(choices=[('FACE', 'FACE'), ('Progress Report', 'Progress Report'), ('(Legacy) Final Partnership Review', '(Legacy) Final Partnership Review'), ('Correspondence', 'Correspondence'), ('Supply/Distribution Plan', 'Supply/Distribution Plan'), ('Data Processing Agreement', 'Data Processing Agreement'), ('Activities involving children and young people', 'Activities involving children and young people'), ('Special Conditions for Construction Works', 'Special Conditions for Construction Works'), ('Other', 'Other')], max_length=64, unique=True, verbose_name='Name')), ], - options={ - 'abstract': False, - }, ), migrations.CreateModel( name='Intervention', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('document_type', models.CharField(choices=[('PD', 'Programme Document'), ( - 'SHPD', 'Simplified Humanitarian Programme Document'), ('SSFA', 'SSFA')], max_length=255, verbose_name='Document Type')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('document_type', models.CharField(choices=[('PD', 'Programme Document'), ('SPD', 'Simplified Programme Document')], max_length=255, verbose_name='Document Type')), ('number', models.CharField(blank=True, max_length=64, null=True, unique=True, verbose_name='Reference Number')), - ('title', models.CharField(max_length=256, verbose_name='Document Title')), - ('status', django_fsm.FSMField(blank=True, choices=[('draft', 'Draft'), ('signed', 'Signed'), ('active', 'Active'), ('ended', 'Ended'), ( - 'closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status')), - ('start', models.DateField(blank=True, help_text='The date the Intervention will start', - null=True, verbose_name='Start Date')), + ('title', models.CharField(max_length=306, verbose_name='Document Title')), + ('status', django_fsm.FSMField(blank=True, choices=[('draft', 'Development'), ('review', 'Review'), ('signature', 'Signature'), ('signed', 'Signed'), ('active', 'Active'), ('cancelled', 'Cancelled'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated'), ('expired', 'Expired')], default='draft', max_length=32, verbose_name='Status')), + ('start', models.DateField(blank=True, help_text='The date the Intervention will start', null=True, verbose_name='Start Date')), ('end', models.DateField(blank=True, help_text='The date the Intervention will end', null=True, verbose_name='End Date')), - ('submission_date', models.DateField(blank=True, help_text='The date the partner submitted complete PD/SSFA documents to Unicef', - null=True, verbose_name='Document Submission Date by CSO')), - ('submission_date_prc', models.DateField( - blank=True, help_text='The date the documents were submitted to the PRC', null=True, verbose_name='Submission Date to PRC')), - ('review_date_prc', models.DateField(blank=True, - help_text='The date the PRC reviewed the partnership', null=True, verbose_name='Review Date by PRC')), - ('prc_review_document', models.FileField(blank=True, max_length=1024, null=True, - upload_to=etools.applications.partners.models.get_prc_intervention_file_path, verbose_name='Review Document by PRC')), - ('signed_pd_document', models.FileField(blank=True, max_length=1024, null=True, - upload_to=etools.applications.partners.models.get_prc_intervention_file_path, verbose_name='Signed PD Document')), + ('submission_date', models.DateField(blank=True, help_text='The date the partner submitted complete PD/SPD documents to Unicef', null=True, verbose_name='Document Submission Date by CSO')), + ('submission_date_prc', models.DateField(blank=True, help_text='The date the documents were submitted to the PRC', null=True, verbose_name='Submission Date to PRC')), + ('reference_number_year', models.IntegerField(null=True)), + ('date_partnership_review_performed', models.DateField(blank=True, null=True, verbose_name='Date Final Partnership Review Performed')), + ('review_date_prc', models.DateField(blank=True, help_text='The date the PRC reviewed the partnership', null=True, verbose_name='Review Date by PRC')), + ('prc_review_document', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_prc_intervention_file_path, verbose_name='Review Document by PRC')), + ('final_review_approved', models.BooleanField(default=False, verbose_name='Final Review Approved')), + ('signed_pd_document', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_prc_intervention_file_path, verbose_name='Signed PD Document')), ('signed_by_unicef_date', models.DateField(blank=True, null=True, verbose_name='Signed by UNICEF Date')), ('signed_by_partner_date', models.DateField(blank=True, null=True, verbose_name='Signed by Partner Date')), ('contingency_pd', models.BooleanField(default=False, verbose_name='Contingency PD')), + ('activation_letter', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_intervention_file_path, verbose_name='Activation Document for Contingency PDs')), + ('activation_protocol', models.TextField(blank=True, null=True, verbose_name='Activation Protocol')), + ('termination_doc', models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_intervention_file_path, verbose_name='Termination document for PDs')), ('population_focus', models.CharField(blank=True, max_length=130, null=True, verbose_name='Population Focus')), ('in_amendment', models.BooleanField(default=False, verbose_name='Amendment Open')), - ('metadata', models.JSONField( - blank=True, default=dict, null=True, verbose_name='Metadata')), + ('humanitarian_flag', models.BooleanField(default=False, verbose_name='Humanitarian')), + ('unicef_court', models.BooleanField(default=True, verbose_name='UNICEF Editing')), + ('date_sent_to_partner', models.DateField(blank=True, null=True, verbose_name='Date first sent to Partner')), + ('unicef_accepted', models.BooleanField(default=False, verbose_name='UNICEF Accepted')), + ('partner_accepted', models.BooleanField(default=False, verbose_name='Partner Accepted')), + ('accepted_on_behalf_of_partner', models.BooleanField(default=False, verbose_name='Accepted on behalf of Partner')), + ('cfei_number', models.CharField(blank=True, default='', max_length=150, null=True, verbose_name='UNPP Number')), + ('context', models.TextField(blank=True, null=True, verbose_name='Context')), + ('implementation_strategy', models.TextField(blank=True, null=True, verbose_name='Implementation Strategy')), + ('gender_rating', models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Gender Rating')), + ('gender_narrative', models.TextField(blank=True, null=True, verbose_name='Gender Narrative')), + ('equity_rating', models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Equity Rating')), + ('equity_narrative', models.TextField(blank=True, null=True, verbose_name='Equity Narrative')), + ('sustainability_rating', models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Sustainability Rating')), + ('sustainability_narrative', models.TextField(blank=True, null=True, verbose_name='Sustainability Narrative')), + ('ip_program_contribution', models.TextField(blank=True, null=True, verbose_name='Partner Non-Financial Contribution to Programme')), + ('hq_support_cost', models.DecimalField(decimal_places=1, default=0.0, max_digits=2, verbose_name='HQ Support Cost')), + ('cash_transfer_modalities', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('payment', 'Direct Payment'), ('reimbursement', 'Reimbursement'), ('dct', 'Direct Cash Transfer')], max_length=50, verbose_name='Cash Transfer Modalities'), default=etools.applications.partners.models.get_default_cash_transfer_modalities, size=None)), + ('unicef_review_type', models.CharField(choices=[('none', 'None'), ('prc', 'PRC'), ('non-prc', 'Non-PRC')], default='none', max_length=50, verbose_name='UNICEF Review Type')), + ('capacity_development', models.TextField(blank=True, null=True, verbose_name='Capacity Development')), + ('other_info', models.TextField(blank=True, null=True, verbose_name='Other Info')), + ('other_details', models.TextField(blank=True, null=True, verbose_name='Other Document Details')), + ('other_partners_involved', models.TextField(blank=True, null=True, verbose_name='Other Partners Involved')), + ('technical_guidance', models.TextField(blank=True, null=True, verbose_name='Technical Guidance')), + ('cancel_justification', models.TextField(blank=True, null=True, verbose_name='Cancel Justification')), + ('has_data_processing_agreement', models.BooleanField(default=False, verbose_name='Data Processing Agreement')), + ('has_activities_involving_children', models.BooleanField(default=False, verbose_name='Activities involving children and young people')), + ('has_special_conditions_for_construction', models.BooleanField(default=False, verbose_name='Special Conditions for Construction Works by Implementing Partners')), + ('metadata', models.JSONField(blank=True, default=dict, null=True, verbose_name='Metadata')), + ('confidential', models.BooleanField(default=False, verbose_name='Confidential')), ], options={ 'ordering': ['-created'], @@ -194,32 +191,33 @@ class Migration(migrations.Migration): name='InterventionAmendment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('types', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[ - ('dates', 'Dates'), ('results', 'Results'), ('budget', 'Budget'), ('other', 'Other')], max_length=50, verbose_name='Types'), size=None)), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('kind', models.CharField(choices=[('normal', 'Normal'), ('contingency', 'Contingency')], default='normal', max_length=20, verbose_name='Kind')), + ('is_active', models.BooleanField(default=True)), + ('types', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('admin_error', 'Type 1: Administrative error (correction)'), ('budget_lte_20', 'Type 2: Budget <= 20%'), ('budget_gt_20', 'Type 3: Budget > 20%'), ('change', 'Type 4: Changes to planned results'), ('no_cost', 'Type 5: No cost extension'), ('other', 'Type 6: Other'), ('dates', 'Dates'), ('results', 'Results'), ('budget', 'Budget')], max_length=50, verbose_name='Types'), size=None)), ('other_description', models.CharField(blank=True, max_length=512, null=True, verbose_name='Description')), - ('signed_date', models.DateField(null=True, verbose_name='Signed Date')), - ('amendment_number', models.IntegerField(default=0, verbose_name='Number')), - ('signed_amendment', models.FileField(max_length=1024, - upload_to=etools.applications.partners.models.get_intervention_amendment_file_path, verbose_name='Amendment Document')), + ('signed_date', models.DateField(blank=True, null=True, verbose_name='Signed Date')), + ('amendment_number', models.CharField(max_length=15, verbose_name='Number')), + ('signed_amendment', models.FileField(blank=True, max_length=1024, upload_to=etools.applications.partners.models.get_intervention_amendment_file_path, verbose_name='Amendment Document')), + ('signed_by_unicef_date', models.DateField(blank=True, null=True, verbose_name='Signed by UNICEF Date')), + ('signed_by_partner_date', models.DateField(blank=True, null=True, verbose_name='Signed by Partner Date')), + ('related_objects_map', models.JSONField(blank=True, default=dict)), + ('difference', models.JSONField(blank=True, default=dict)), ], options={ - 'abstract': False, + 'verbose_name': 'Amendment', + 'verbose_name_plural': 'Intervention amendments', }, ), migrations.CreateModel( name='InterventionAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('attachment', models.FileField(max_length=1024, - upload_to=etools.applications.partners.models.get_intervention_attachments_file_path, verbose_name='Attachment')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('attachment', models.FileField(max_length=1024, upload_to=etools.applications.partners.models.get_intervention_attachments_file_path, verbose_name='Attachment')), + ('active', models.BooleanField(default=True)), ], options={ 'ordering': ['-created'], @@ -229,38 +227,66 @@ class Migration(migrations.Migration): name='InterventionBudget', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('partner_contribution', models.DecimalField(decimal_places=2, - default=0, max_digits=20, verbose_name='Partner Contribution')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('partner_contribution', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner Contribution')), ('unicef_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Unicef Cash')), - ('in_kind_amount', models.DecimalField(decimal_places=2, - default=0, max_digits=20, verbose_name='UNICEF Supplies')), + ('in_kind_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Supplies')), ('total', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Total')), - ('partner_contribution_local', models.DecimalField(decimal_places=2, - default=0, max_digits=20, verbose_name='Partner Contribution Local')), - ('unicef_cash_local', models.DecimalField(decimal_places=2, - default=0, max_digits=20, verbose_name='Unicef Cash Local')), - ('in_kind_amount_local', models.DecimalField(decimal_places=2, - default=0, max_digits=20, verbose_name='UNICEF Supplies Local')), - ('currency', CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('YER1', 'YER1'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ( - 'PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRO', 'MRO'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], max_length=4, null=True, verbose_name='Currency')), + ('partner_contribution_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner Contribution Local')), + ('partner_supply_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner Supplies Local')), + ('total_partner_contribution_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total Partner Contribution')), + ('total_unicef_cash_local_wo_hq', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total HQ Cash Local')), + ('total_hq_cash_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total HQ Cash Local')), + ('unicef_cash_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Unicef Cash Local')), + ('in_kind_amount_local', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Supplies Local')), + ('currency', etools.libraries.djangolib.fields.CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLE', 'SLE'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=5, verbose_name='Currency')), ('total_local', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Total Local')), + ('programme_effectiveness', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Programme Effectiveness (%)')), + ], + options={ + 'verbose_name_plural': 'Intervention budget', + }, + ), + migrations.CreateModel( + name='InterventionManagementBudget', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('act1_unicef', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)')), + ('act1_partner', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)')), + ('act2_unicef', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)')), + ('act2_partner', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)')), + ('act3_unicef', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)')), + ('act3_partner', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)')), ], options={ 'abstract': False, }, ), + migrations.CreateModel( + name='InterventionManagementBudgetItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='Name')), + ('unit', models.CharField(max_length=150, verbose_name='Unit')), + ('unit_price', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Unit Price')), + ('no_units', models.DecimalField(decimal_places=2, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number')), + ('kind', models.CharField(choices=[('in_country', 'In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), ('operational', 'Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), ('planning', 'Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)')], max_length=15, verbose_name='Kind')), + ('unicef_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash Local')), + ('cso_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash Local')), + ], + options={ + 'ordering': ('id',), + }, + ), migrations.CreateModel( name='InterventionPlannedVisits', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('year', models.IntegerField(default=etools.libraries.pythonlib.datetime.get_current_year, verbose_name='Year')), ('programmatic_q1', models.IntegerField(default=0, verbose_name='Programmatic Q1')), ('programmatic_q2', models.IntegerField(default=0, verbose_name='Programmatic Q2')), @@ -271,14 +297,19 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Intervention Planned Visits', }, ), + migrations.CreateModel( + name='InterventionPlannedVisitSite', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quarter', models.PositiveSmallIntegerField(choices=[(1, 'Q1'), (2, 'Q2'), (3, 'Q3'), (4, 'Q4')])), + ], + ), migrations.CreateModel( name='InterventionReportingPeriod', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('start_date', models.DateField(verbose_name='Reporting Period Start Date')), ('end_date', models.DateField(verbose_name='Reporting Period End Date')), ('due_date', models.DateField(verbose_name='Report Due Date')), @@ -291,50 +322,90 @@ class Migration(migrations.Migration): name='InterventionResultLink', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code')), ], options={ - 'abstract': False, + 'ordering': ['created'], }, ), migrations.CreateModel( - name='InterventionSectorLocationLink', + name='InterventionReview', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='sector_locations', to='partners.Intervention', verbose_name='Intervention')), - ('locations', models.ManyToManyField(blank=True, related_name='intervention_sector_locations', - to='locations.Location', verbose_name='Locations')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('relationship_is_represented', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=10, verbose_name='The proposed relationship is best represented and regulated by partnership (as opposed to procurement), with both UNICEF and the CSO making clear contributions to the PD/SPD')), + ('partner_comparative_advantage', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The partner selection evidences the CSO’s comparative advantage and value for money in relation to the planned results')), + ('relationships_are_positive', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Previous UNICEF/UN relationships with the proposed CSO have been positive')), + ('pd_is_relevant', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The proposed PD/SPD is relevant to achieving results in the country programme document, the relevant sector workplan and or humanitarian response plan')), + ('pd_is_guided', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The results framework of the proposed PD/SPD has been guided by M&E feedback during the drafting process')), + ('ges_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Gender, equity and sustainability have been considered in the programme design process')), + ('budget_is_aligned', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The budget of the proposed PD/SPD is aligned with the principles of value for money with the effective and efficient programme management costs adhering to office defined limits')), + ('supply_issues_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The relevant supply issues have been duly considered')), + ('overall_comment', models.TextField(blank=True)), + ('overall_approval', models.BooleanField(blank=True, null=True)), + ('review_type', models.CharField(blank=True, choices=[('prc', 'PRC Review'), ('non-prc', 'Non-PRC Review'), ('no-review', 'No Review Required')], max_length=50, verbose_name='Types')), + ('actions_list', models.TextField(blank=True, verbose_name='Actions List')), + ('review_date', models.DateField(blank=True, null=True, verbose_name='Review Date')), + ('meeting_date', models.DateField(blank=True, null=True, verbose_name='Meeting Date')), + ('sent_back_comment', models.TextField(blank=True, verbose_name='Sent Back by Secretary Comment')), ], options={ - 'abstract': False, + 'ordering': ['-created'], + }, + ), + migrations.CreateModel( + name='InterventionReviewNotification', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ], + options={ + 'ordering': ('review', '-created'), + }, + ), + migrations.CreateModel( + name='InterventionRisk', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('risk_type', models.CharField(choices=[('environment', 'Social & Environmental'), ('financial', 'Financial'), ('operational', 'Operational'), ('organizational', 'Organizational'), ('political', 'Political'), ('strategic', 'Strategic'), ('security', 'Safety & security')], max_length=50, verbose_name='Risk Type')), + ('mitigation_measures', models.TextField()), + ], + options={ + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='InterventionSupplyItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('title', models.CharField(max_length=150, verbose_name='Title')), + ('unit_number', models.DecimalField(decimal_places=2, default=1, max_digits=20, verbose_name='Unit Number')), + ('unit_price', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Unit Price')), + ('total_price', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Total Price')), + ('other_mentions', models.TextField(blank=True, verbose_name='Other Mentions')), + ('provided_by', models.CharField(choices=[('unicef', 'UNICEF'), ('partner', 'Partner')], default='unicef', max_length=10, verbose_name='Provided By')), + ('unicef_product_number', models.CharField(blank=True, default='', max_length=150, verbose_name='UNICEF Product Number')), + ], + options={ + 'ordering': ('id',), }, ), migrations.CreateModel( name='PartnerOrganization', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('partner_type', models.CharField(choices=[('Bilateral / Multilateral', 'Bilateral / Multilateral'), ('Civil Society Organization', - 'Civil Society Organization'), ('Government', 'Government'), ('UN Agency', 'UN Agency')], max_length=50, verbose_name='Partner Type')), - ('cso_type', models.CharField(blank=True, choices=[('International', 'International'), ('National', 'National'), ( - 'Community Based Organization', 'Community Based Organization'), ('Academic Institution', 'Academic Institution')], max_length=50, null=True, verbose_name='CSO Type')), - ('name', models.CharField(help_text='Please make sure this matches the name you enter in VISION', - max_length=255, verbose_name='Name')), - ('short_name', models.CharField(blank=True, max_length=50, verbose_name='Short Name')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')), - ('shared_with', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ( - 'UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, null=True, size=None, verbose_name='Shared Partner')), + ('shared_with', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, choices=[('DPKO', 'DPKO'), ('ECA', 'ECA'), ('ECLAC', 'ECLAC'), ('ESCWA', 'ESCWA'), ('FAO', 'FAO'), ('ILO', 'ILO'), ('IOM', 'IOM'), ('OHCHR', 'OHCHR'), ('UN', 'UN'), ('UN Women', 'UN Women'), ('UNAIDS', 'UNAIDS'), ('UNDP', 'UNDP'), ('UNESCO', 'UNESCO'), ('UNFPA', 'UNFPA'), ('UN - Habitat', 'UN - Habitat'), ('UNHCR', 'UNHCR'), ('UNODC', 'UNODC'), ('UNOPS', 'UNOPS'), ('UNRWA', 'UNRWA'), ('UNSC', 'UNSC'), ('UNU', 'UNU'), ('WB', 'WB'), ('WFP', 'WFP'), ('WHO', 'WHO')], max_length=20), blank=True, null=True, size=None, verbose_name='Shared Partner')), ('street_address', models.CharField(blank=True, max_length=500, null=True, verbose_name='Street Address')), ('city', models.CharField(blank=True, max_length=64, null=True, verbose_name='City')), ('postal_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Postal Code')), @@ -342,80 +413,64 @@ class Migration(migrations.Migration): ('address', models.TextField(blank=True, null=True, verbose_name='Address')), ('email', models.CharField(blank=True, max_length=255, null=True, verbose_name='Email Address')), ('phone_number', models.CharField(blank=True, max_length=64, null=True, verbose_name='Phone Number')), - ('vendor_number', models.CharField(blank=True, max_length=30, - null=True, unique=True, verbose_name='Vendor Number')), ('alternate_id', models.IntegerField(blank=True, null=True, verbose_name='Alternate ID')), ('alternate_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Alternate Name')), - ('rating', models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Moderate', 'Medium'), ( - 'Low', 'Low'), ('Non-Assessed', 'Non Required')], max_length=50, null=True, verbose_name='Risk Rating')), + ('rating', models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Not Required', 'Not Required')], max_length=50, null=True, verbose_name='Risk Rating')), ('type_of_assessment', models.CharField(max_length=50, null=True, verbose_name='Assessment Type')), ('last_assessment_date', models.DateField(blank=True, null=True, verbose_name='Last Assessment Date')), - ('core_values_assessment_date', models.DateField(blank=True, null=True, - verbose_name='Date positively assessed against core values')), - ('core_values_assessment', models.FileField(blank=True, help_text='Only required for CSO partners', - max_length=1024, null=True, upload_to='partners/core_values/', verbose_name='Core Values Assessment')), + ('core_values_assessment_date', models.DateField(blank=True, null=True, verbose_name='Date positively assessed against core values')), ('vision_synced', models.BooleanField(default=False, verbose_name='VISION Synced')), ('blocked', models.BooleanField(default=False, verbose_name='Blocked')), - ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), ('deleted_flag', models.BooleanField(default=False, verbose_name='Marked for deletion')), - ('total_ct_cp', models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred for Country Programme', - max_digits=12, null=True, verbose_name='Total Cash Transferred for Country Programme')), - ('total_ct_cy', models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred per Current Year', - max_digits=12, null=True, verbose_name='Total Cash Transferred per Current Year')), - ('net_ct_cy', models.DecimalField(blank=True, decimal_places=2, help_text='Net Cash Transferred per Current Year', - max_digits=12, null=True, verbose_name='Net Cash Transferred')), - ('reported_cy', models.DecimalField(blank=True, decimal_places=2, - help_text='Liquidations 1 Oct - 30 Sep', max_digits=12, null=True, verbose_name='Liquidation')), - ('total_ct_ytd', models.DecimalField(blank=True, decimal_places=2, help_text='Cash Transfers Jan - Dec', - max_digits=12, null=True, verbose_name='Cash Transfer Jan - Dec')), - ('hact_values', models.JSONField(blank=True, encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, - default=etools.applications.partners.models.hact_default, null=True, verbose_name='HACT')), - ('basis_for_risk_rating', models.CharField(blank=True, - max_length=50, null=True, verbose_name='Basis for Risk Rating')), + ('manually_blocked', models.BooleanField(default=False, verbose_name='Manually Hidden')), + ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), + ('total_ct_cp', models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred for Country Programme', max_digits=20, null=True, verbose_name='Total Cash Transferred for Country Programme')), + ('total_ct_cy', models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred per Current Year', max_digits=20, null=True, verbose_name='Total Cash Transferred per Current Year')), + ('net_ct_cy', models.DecimalField(blank=True, decimal_places=2, help_text='Net Cash Transferred per Current Year', max_digits=20, null=True, verbose_name='Net Cash Transferred')), + ('reported_cy', models.DecimalField(blank=True, decimal_places=2, help_text='Liquidations 1 Oct - 30 Sep', max_digits=20, null=True, verbose_name='Liquidation')), + ('total_ct_ytd', models.DecimalField(blank=True, decimal_places=2, help_text='Cash Transfers Jan - Dec', max_digits=20, null=True, verbose_name='Cash Transfer Jan - Dec')), + ('outstanding_dct_amount_6_to_9_months_usd', models.DecimalField(blank=True, decimal_places=2, help_text='Outstanding DCT 6/9 months', max_digits=20, null=True, verbose_name='Outstanding DCT 6/9 months')), + ('outstanding_dct_amount_more_than_9_months_usd', models.DecimalField(blank=True, decimal_places=2, help_text='Outstanding DCT more than 9 months', max_digits=20, null=True, verbose_name='Outstanding DCT more than 9 months')), + ('hact_values', models.JSONField(blank=True, default=etools.applications.partners.models.hact_default, encoder=etools.libraries.pythonlib.encoders.CustomJSONEncoder, null=True, verbose_name='HACT')), + ('basis_for_risk_rating', models.CharField(blank=True, default='', max_length=50, verbose_name='Basis for Risk Rating')), + ('psea_assessment_date', models.DateTimeField(blank=True, null=True, verbose_name='Last PSEA Assess. Date')), + ('sea_risk_rating_name', models.CharField(blank=True, default='', max_length=150, verbose_name='PSEA Risk Rating')), + ('highest_risk_rating_type', models.CharField(blank=True, default='', max_length=150, verbose_name='Highest Risk Rating Type')), + ('highest_risk_rating_name', models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Not Required', 'Not Required'), ('Low Capacity (High Risk)', 'Low Capacity (High Risk)'), ('Medium Capacity (Moderate Risk)', 'Medium Capacity (Moderate Risk)'), ('Full Capacity (Low Risk)', 'Full Capacity (Low Risk)'), ('Low Capacity Assumed - Emergency', 'Low Capacity Assumed - Emergency'), ('No Contact with Beneficiaries', 'No Contact with Beneficiaries'), ('Not Assessed', 'Not Assessed')], default='', max_length=150, verbose_name='Highest Risk Rating Name')), ], options={ - 'ordering': ['name'], + 'base_manager_name': 'objects', }, ), migrations.CreateModel( - name='PartnerStaffMember', + name='PartnerPlannedVisits', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('title', models.CharField(blank=True, max_length=64, null=True, verbose_name='Title')), - ('first_name', models.CharField(max_length=64, verbose_name='First Name')), - ('last_name', models.CharField(max_length=64, verbose_name='Last Name')), - ('email', models.CharField(max_length=128, unique=True, verbose_name='Email Address')), - ('phone', models.CharField(blank=True, max_length=64, null=True, verbose_name='Phone Number')), - ('active', models.BooleanField(default=True, verbose_name='Active')), - ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='staff_members', to='partners.PartnerOrganization', verbose_name='Partner')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('year', models.IntegerField(default=etools.libraries.pythonlib.datetime.get_current_year, verbose_name='Year')), + ('programmatic_q1', models.IntegerField(default=0, verbose_name='Programmatic Q1')), + ('programmatic_q2', models.IntegerField(default=0, verbose_name='Programmatic Q2')), + ('programmatic_q3', models.IntegerField(default=0, verbose_name='Programmatic Q3')), + ('programmatic_q4', models.IntegerField(default=0, verbose_name='Programmatic Q4')), ], options={ - 'abstract': False, + 'verbose_name_plural': 'Partner Planned Visits', }, ), migrations.CreateModel( name='PlannedEngagement', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('spot_check_mr', QuarterField(blank=True, choices=[ - (b'q1', b'Q1'), (b'q2', b'Q2'), (b'q3', b'Q3'), (b'q4', b'Q4')], max_length=2, null=True, verbose_name='Spot Check MR')), - ('spot_check_follow_up_q1', models.IntegerField(default=0, verbose_name='Spot Check Q1')), - ('spot_check_follow_up_q2', models.IntegerField(default=0, verbose_name='Spot Check Q2')), - ('spot_check_follow_up_q3', models.IntegerField(default=0, verbose_name='Spot Check Q3')), - ('spot_check_follow_up_q4', models.IntegerField(default=0, verbose_name='Spot Check Q4')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('spot_check_follow_up', models.IntegerField(default=0, verbose_name='Spot Check Follow Up Required')), + ('spot_check_planned_q1', models.IntegerField(default=0, verbose_name='Spot Check Q1')), + ('spot_check_planned_q2', models.IntegerField(default=0, verbose_name='Spot Check Q2')), + ('spot_check_planned_q3', models.IntegerField(default=0, verbose_name='Spot Check Q3')), + ('spot_check_planned_q4', models.IntegerField(default=0, verbose_name='Spot Check Q4')), ('scheduled_audit', models.BooleanField(default=False, verbose_name='Scheduled Audit')), ('special_audit', models.BooleanField(default=False, verbose_name='Special Audit')), - ('partner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='planned_engagement', to='partners.PartnerOrganization', verbose_name='Partner')), ], options={ 'abstract': False, @@ -428,8 +483,27 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), ], ), - migrations.AlterUniqueTogether( - name='partnerorganization', - unique_together=set([('name', 'vendor_number')]), + migrations.CreateModel( + name='PRCOfficerInterventionReview', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('relationship_is_represented', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=10, verbose_name='The proposed relationship is best represented and regulated by partnership (as opposed to procurement), with both UNICEF and the CSO making clear contributions to the PD/SPD')), + ('partner_comparative_advantage', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The partner selection evidences the CSO’s comparative advantage and value for money in relation to the planned results')), + ('relationships_are_positive', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Previous UNICEF/UN relationships with the proposed CSO have been positive')), + ('pd_is_relevant', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The proposed PD/SPD is relevant to achieving results in the country programme document, the relevant sector workplan and or humanitarian response plan')), + ('pd_is_guided', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The results framework of the proposed PD/SPD has been guided by M&E feedback during the drafting process')), + ('ges_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Gender, equity and sustainability have been considered in the programme design process')), + ('budget_is_aligned', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The budget of the proposed PD/SPD is aligned with the principles of value for money with the effective and efficient programme management costs adhering to office defined limits')), + ('supply_issues_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The relevant supply issues have been duly considered')), + ('overall_comment', models.TextField(blank=True)), + ('overall_approval', models.BooleanField(blank=True, null=True)), + ('review_date', models.DateField(blank=True, null=True, verbose_name='Review Date')), + ('overall_review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_reviews', to='partners.interventionreview')), + ], + options={ + 'ordering': ['-created'], + }, ), ] diff --git a/src/etools/applications/partners/migrations/0002_auto_20180326_1605.py b/src/etools/applications/partners/migrations/0002_auto_20180326_1605.py deleted file mode 100644 index cd1b6021b2..0000000000 --- a/src/etools/applications/partners/migrations/0002_auto_20180326_1605.py +++ /dev/null @@ -1,200 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('reports', '0001_initial'), - ('funds', '0002_auto_20180326_1605'), - ('users', '0001_initial'), - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('partners', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='interventionsectorlocationlink', - name='sector', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='intervention_locations', to='reports.Section', verbose_name='Sector'), - ), - migrations.AddField( - model_name='interventionresultlink', - name='cp_output', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='intervention_links', to='reports.Result', verbose_name='CP Output'), - ), - migrations.AddField( - model_name='interventionresultlink', - name='intervention', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='result_links', to='partners.Intervention', verbose_name='Intervention'), - ), - migrations.AddField( - model_name='interventionresultlink', - name='ram_indicators', - field=models.ManyToManyField(blank=True, to='reports.Indicator', verbose_name='RAM Indicators'), - ), - migrations.AddField( - model_name='interventionreportingperiod', - name='intervention', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='reporting_periods', to='partners.Intervention', verbose_name='Intervention'), - ), - migrations.AddField( - model_name='interventionplannedvisits', - name='intervention', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='planned_visits', to='partners.Intervention', verbose_name='Intervention'), - ), - migrations.AddField( - model_name='interventionbudget', - name='intervention', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='planned_budget', to='partners.Intervention', verbose_name='Intervention'), - ), - migrations.AddField( - model_name='interventionattachment', - name='intervention', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='attachments', to='partners.Intervention', verbose_name='Intervention'), - ), - migrations.AddField( - model_name='interventionattachment', - name='type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='partners.FileType', verbose_name='Type'), - ), - migrations.AddField( - model_name='interventionamendment', - name='intervention', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='amendments', - to='partners.Intervention', verbose_name='Reference Number'), - ), - migrations.AddField( - model_name='intervention', - name='agreement', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='interventions', to='partners.Agreement', verbose_name='Agreement'), - ), - migrations.AddField( - model_name='intervention', - name='country_programme', - field=models.ForeignKey(blank=True, help_text='Which Country Programme does this Intervention belong to?', null=True, - on_delete=django.db.models.deletion.DO_NOTHING, related_name='interventions', to='reports.CountryProgramme', verbose_name='Country Programme'), - ), - migrations.AddField( - model_name='intervention', - name='flat_locations', - field=models.ManyToManyField(blank=True, related_name='intervention_flat_locations', - to='locations.Location', verbose_name='Locations'), - ), - migrations.AddField( - model_name='intervention', - name='offices', - field=models.ManyToManyField(blank=True, related_name='_intervention_offices_+', - to='users.Office', verbose_name='Office'), - ), - migrations.AddField( - model_name='intervention', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='signed_interventions', to='partners.PartnerStaffMember', verbose_name='Signed by Partner'), - ), - migrations.AddField( - model_name='intervention', - name='partner_focal_points', - field=models.ManyToManyField(blank=True, related_name='_intervention_partner_focal_points_+', - to='partners.PartnerStaffMember', verbose_name='CSO Authorized Officials'), - ), - migrations.AddField( - model_name='intervention', - name='sections', - field=models.ManyToManyField(blank=True, related_name='interventions', - to='reports.Section', verbose_name='Sections'), - ), - migrations.AddField( - model_name='intervention', - name='unicef_focal_points', - field=models.ManyToManyField(blank=True, related_name='_intervention_unicef_focal_points_+', - to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), - ), - migrations.AddField( - model_name='intervention', - name='unicef_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='signed_interventions+', to=settings.AUTH_USER_MODEL, verbose_name='Signed by UNICEF'), - ), - migrations.AddField( - model_name='fundingcommitment', - name='grant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='funds.Grant', verbose_name='Grant'), - ), - migrations.AddField( - model_name='assessment', - name='approving_officer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL, verbose_name='Approving Officer'), - ), - migrations.AddField( - model_name='assessment', - name='partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='assessments', to='partners.PartnerOrganization', verbose_name='Partner'), - ), - migrations.AddField( - model_name='assessment', - name='requesting_officer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='requested_assessments', to=settings.AUTH_USER_MODEL, verbose_name='Requesting Officer'), - ), - migrations.AddField( - model_name='agreementamendment', - name='agreement', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='amendments', to='partners.Agreement', verbose_name='Agreement'), - ), - migrations.AddField( - model_name='agreement', - name='authorized_officers', - field=models.ManyToManyField(blank=True, related_name='agreement_authorizations', - to='partners.PartnerStaffMember', verbose_name='Partner Authorized Officer'), - ), - migrations.AddField( - model_name='agreement', - name='country_programme', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='agreements', to='reports.CountryProgramme', verbose_name='Country Programme'), - ), - migrations.AddField( - model_name='agreement', - name='partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='agreements', to='partners.PartnerOrganization', verbose_name='Partner'), - ), - migrations.AddField( - model_name='agreement', - name='partner_manager', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='agreements_signed', to='partners.PartnerStaffMember', verbose_name='Signed by partner'), - ), - migrations.AddField( - model_name='agreement', - name='signed_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='agreements_signed+', to=settings.AUTH_USER_MODEL, verbose_name='Signed By UNICEF'), - ), - migrations.AlterUniqueTogether( - name='interventionplannedvisits', - unique_together=set([('intervention', 'year')]), - ), - ] diff --git a/src/etools/applications/partners/migrations/0002_initial.py b/src/etools/applications/partners/migrations/0002_initial.py new file mode 100644 index 0000000000..682ae20629 --- /dev/null +++ b/src/etools/applications/partners/migrations/0002_initial.py @@ -0,0 +1,318 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0001_initial'), + ('reports', '0001_initial'), + ('organizations', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('locations', '0001_initial'), + ('field_monitoring_settings', '0003_initial'), + ] + + operations = [ + migrations.AddField( + model_name='prcofficerinterventionreview', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_reviews', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='plannedengagement', + name='partner', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='planned_engagement', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='partnerplannedvisits', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='planned_visits', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='partnerorganization', + name='lead_office', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reports.office', verbose_name='Lead Office'), + ), + migrations.AddField( + model_name='partnerorganization', + name='lead_section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reports.section', verbose_name='Lead Section'), + ), + migrations.AddField( + model_name='partnerorganization', + name='organization', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='partner', to='organizations.organization'), + ), + migrations.AddField( + model_name='interventionsupplyitem', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='supply_items', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionsupplyitem', + name='result', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.interventionresultlink', verbose_name='Result'), + ), + migrations.AddField( + model_name='interventionrisk', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionreviewnotification', + name='review', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_notifications', to='partners.interventionreview'), + ), + migrations.AddField( + model_name='interventionreviewnotification', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_notifications', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='interventionreview', + name='amendment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='partners.interventionamendment', verbose_name='Amendment'), + ), + migrations.AddField( + model_name='interventionreview', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionreview', + name='overall_approver', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Overall Approver'), + ), + migrations.AddField( + model_name='interventionreview', + name='prc_officers', + field=models.ManyToManyField(blank=True, related_name='_partners_interventionreview_prc_officers_+', to=settings.AUTH_USER_MODEL, verbose_name='PRC Officers'), + ), + migrations.AddField( + model_name='interventionreview', + name='submitted_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='PRC Submitted By'), + ), + migrations.AddField( + model_name='interventionresultlink', + name='cp_output', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='intervention_links', to='reports.result', verbose_name='CP Output'), + ), + migrations.AddField( + model_name='interventionresultlink', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='result_links', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionresultlink', + name='ram_indicators', + field=models.ManyToManyField(blank=True, to='reports.Indicator', verbose_name='RAM Indicators'), + ), + migrations.AddField( + model_name='interventionreportingperiod', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reporting_periods', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionplannedvisitsite', + name='planned_visits', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='partners.interventionplannedvisits'), + ), + migrations.AddField( + model_name='interventionplannedvisitsite', + name='site', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_settings.locationsite'), + ), + migrations.AddField( + model_name='interventionplannedvisits', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='planned_visits', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionplannedvisits', + name='sites', + field=models.ManyToManyField(blank=True, through='partners.InterventionPlannedVisitSite', to='field_monitoring_settings.LocationSite', verbose_name='Sites'), + ), + migrations.AddField( + model_name='interventionmanagementbudgetitem', + name='budget', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='partners.interventionmanagementbudget', verbose_name='Budget'), + ), + migrations.AddField( + model_name='interventionmanagementbudget', + name='intervention', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='management_budgets', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionbudget', + name='intervention', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='planned_budget', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionattachment', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionattachment', + name='type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.filetype', verbose_name='Type'), + ), + migrations.AddField( + model_name='interventionamendment', + name='amended_intervention', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='amendment', to='partners.intervention', verbose_name='Amended Intervention'), + ), + migrations.AddField( + model_name='interventionamendment', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='amendments', to='partners.intervention', verbose_name='Reference Number'), + ), + migrations.AddField( + model_name='interventionamendment', + name='partner_authorized_officer_signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Signed by Partner'), + ), + migrations.AddField( + model_name='interventionamendment', + name='unicef_signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='++', to=settings.AUTH_USER_MODEL, verbose_name='Signed by UNICEF'), + ), + migrations.AddField( + model_name='intervention', + name='agreement', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interventions', to='partners.agreement', verbose_name='Agreement'), + ), + migrations.AddField( + model_name='intervention', + name='budget_owner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='budget_owner+', to=settings.AUTH_USER_MODEL, verbose_name='Budget Owner'), + ), + migrations.AddField( + model_name='intervention', + name='country_programme', + field=models.ForeignKey(blank=True, help_text='Which Country Programme does this Intervention belong to?', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='reports.countryprogramme', verbose_name='Country Programme'), + ), + migrations.AddField( + model_name='intervention', + name='country_programmes', + field=models.ManyToManyField(blank=True, help_text='Which Country Programme does this Intervention belong to?', related_name='interventions', to='reports.CountryProgramme', verbose_name='Country Programmes'), + ), + migrations.AddField( + model_name='intervention', + name='flat_locations', + field=models.ManyToManyField(blank=True, related_name='intervention_flat_locations', to='locations.Location', verbose_name='Locations'), + ), + migrations.AddField( + model_name='intervention', + name='offices', + field=models.ManyToManyField(blank=True, related_name='office_interventions', to='reports.Office', verbose_name='Office'), + ), + migrations.AddField( + model_name='intervention', + name='partner_authorized_officer_signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='signed_interventions', to=settings.AUTH_USER_MODEL, verbose_name='Signed by Partner'), + ), + migrations.AddField( + model_name='intervention', + name='partner_focal_points', + field=models.ManyToManyField(blank=True, related_name='_partners_intervention_partner_focal_points_+', to=settings.AUTH_USER_MODEL, verbose_name='CSO Authorized Officials'), + ), + migrations.AddField( + model_name='intervention', + name='sections', + field=models.ManyToManyField(blank=True, related_name='interventions', to='reports.Section', verbose_name='Sections'), + ), + migrations.AddField( + model_name='intervention', + name='sites', + field=models.ManyToManyField(blank=True, related_name='interventions', to='field_monitoring_settings.LocationSite', verbose_name='Sites'), + ), + migrations.AddField( + model_name='intervention', + name='unicef_focal_points', + field=models.ManyToManyField(blank=True, related_name='_partners_intervention_unicef_focal_points_+', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), + ), + migrations.AddField( + model_name='intervention', + name='unicef_signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='signed_interventions+', to=settings.AUTH_USER_MODEL, verbose_name='Signed by UNICEF'), + ), + migrations.AddField( + model_name='corevaluesassessment', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='core_values_assessments', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='assessment', + name='approving_officer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Approving Officer'), + ), + migrations.AddField( + model_name='assessment', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assessments', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='assessment', + name='requesting_officer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='requested_assessments', to=settings.AUTH_USER_MODEL, verbose_name='Requesting Officer'), + ), + migrations.AddField( + model_name='agreementamendment', + name='agreement', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='amendments', to='partners.agreement', verbose_name='Agreement'), + ), + migrations.AddField( + model_name='agreement', + name='authorized_officers', + field=models.ManyToManyField(blank=True, related_name='agreement_authorizations', to=settings.AUTH_USER_MODEL, verbose_name='Partner Authorized Officer'), + ), + migrations.AddField( + model_name='agreement', + name='country_programme', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements', to='reports.countryprogramme', verbose_name='Country Programme'), + ), + migrations.AddField( + model_name='agreement', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='agreements', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='agreement', + name='partner_manager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_signed', to=settings.AUTH_USER_MODEL, verbose_name='Signed by partner'), + ), + migrations.AddField( + model_name='agreement', + name='signed_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_signed+', to=settings.AUTH_USER_MODEL, verbose_name='Signed By UNICEF'), + ), + migrations.AddField( + model_name='agreement', + name='terms_acknowledged_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_acknowledged+', to=settings.AUTH_USER_MODEL, verbose_name='Terms Acknowledged By'), + ), + migrations.AlterUniqueTogether( + name='partnerplannedvisits', + unique_together={('partner', 'year')}, + ), + migrations.AlterUniqueTogether( + name='interventionresultlink', + unique_together={('intervention', 'cp_output')}, + ), + migrations.AlterUniqueTogether( + name='interventionplannedvisitsite', + unique_together={('planned_visits', 'site', 'quarter')}, + ), + migrations.AlterUniqueTogether( + name='interventionplannedvisits', + unique_together={('intervention', 'year')}, + ), + ] diff --git a/src/etools/applications/partners/migrations/0003_auto_20180329_1155.py b/src/etools/applications/partners/migrations/0003_auto_20180329_1155.py deleted file mode 100644 index d8b26abd7f..0000000000 --- a/src/etools/applications/partners/migrations/0003_auto_20180329_1155.py +++ /dev/null @@ -1,104 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-29 11:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0002_auto_20180326_1605'), - ] - - operations = [ - migrations.AlterField( - model_name='directcashtransfer', - name='amount_3_to_6_months_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, - verbose_name='Amount between 3 and 6 months (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='amount_6_to_9_months_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, - verbose_name='Amount between 6 and 9 months (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='amount_less_than_3_Months_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount mess than 3 months (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='amount_more_than_9_Months_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount more than 9 months (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='amount_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='liquidation_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Liquidation (USD)'), - ), - migrations.AlterField( - model_name='directcashtransfer', - name='outstanding_balance_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Outstanding Balance (USD)'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='agreement_amount', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Agreement Amount'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='commitment_amount', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Commitment Amount'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='expenditure_amount', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Expenditure Amount'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='fr_item_amount_usd', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, - null=True, verbose_name='Item Amount (USD)'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='net_ct_cy', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Net Cash Transferred per Current Year', - max_digits=20, null=True, verbose_name='Net Cash Transferred'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='reported_cy', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Liquidations 1 Oct - 30 Sep', - max_digits=20, null=True, verbose_name='Liquidation'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='total_ct_cp', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred for Country Programme', - max_digits=20, null=True, verbose_name='Total Cash Transferred for Country Programme'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='total_ct_cy', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Total Cash Transferred per Current Year', - max_digits=20, null=True, verbose_name='Total Cash Transferred per Current Year'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='total_ct_ytd', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Cash Transfers Jan - Dec', - max_digits=20, null=True, verbose_name='Cash Transfer Jan - Dec'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0004_fix_null_values.py b/src/etools/applications/partners/migrations/0004_fix_null_values.py deleted file mode 100644 index 6f75c006fd..0000000000 --- a/src/etools/applications/partners/migrations/0004_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0003_auto_20180329_1155'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0005_make_not_nullable.py b/src/etools/applications/partners/migrations/0005_make_not_nullable.py deleted file mode 100644 index 9218d3f807..0000000000 --- a/src/etools/applications/partners/migrations/0005_make_not_nullable.py +++ /dev/null @@ -1,128 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:34 - -from django.db import migrations, models -from unicef_djangolib.fields import QuarterField - -import etools.applications.core -from etools.libraries.djangolib.fields import CurrencyField - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0004_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='names_of_other_agencies', - field=models.CharField(blank=True, default=True, help_text='List the names of the other agencies they have worked with', - max_length=255, verbose_name='Other Agencies'), - ), - migrations.AlterField( - model_name='assessment', - name='notes', - field=models.CharField(blank=True, default='', help_text='Note any special requests to be considered during the assessment', - max_length=255, verbose_name='Special requests'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='fc_ref', - field=models.CharField(blank=True, default='', max_length=50, unique=True, verbose_name='Reference'), - ), - migrations.AlterField( - model_name='intervention', - name='number', - field=models.CharField(blank=True, default='', max_length=64, - unique=True, verbose_name='Reference Number'), - ), - migrations.AlterField( - model_name='intervention', - name='population_focus', - field=models.CharField(blank=True, default='', max_length=130, verbose_name='Population Focus'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='other_description', - field=models.CharField(blank=True, default='', max_length=512, verbose_name='Description'), - ), - migrations.AlterField( - model_name='interventionbudget', - name='currency', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('YER1', 'YER1'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ( - 'SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRO', 'MRO'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=4, verbose_name='Currency'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='address', - field=models.TextField(blank=True, default='', verbose_name='Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='alternate_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Alternate Name'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='basis_for_risk_rating', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Basis for Risk Rating'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='city', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='City'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='country', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Country'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='email', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Email Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='phone_number', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='postal_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Postal Code'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='rating', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Moderate', 'Medium'), ( - 'Low', 'Low'), ('Non-Assessed', 'Non Required')], default='', max_length=50, verbose_name='Risk Rating'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='street_address', - field=models.CharField(blank=True, default='', max_length=500, verbose_name='Street Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='type_of_assessment', - field=models.CharField(default='', max_length=50, verbose_name='Assessment Type'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='phone', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='title', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Title'), - ), - migrations.AlterField( - model_name='plannedengagement', - name='spot_check_mr', - field=QuarterField(blank=True, choices=[( - b'q1', b'Q1'), (b'q2', b'Q2'), (b'q3', b'Q3'), (b'q4', b'Q4')], default='', max_length=2, null=True, verbose_name='Spot Check MR'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0006_auto_20180411_1702.py b/src/etools/applications/partners/migrations/0006_auto_20180411_1702.py deleted file mode 100644 index 3e5c5470ca..0000000000 --- a/src/etools/applications/partners/migrations/0006_auto_20180411_1702.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-11 17:02 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0005_make_not_nullable'), - ] - - operations = [ - migrations.AlterField( - model_name='agreement', - name='partner_manager', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='agreements_signed', to='partners.PartnerStaffMember', verbose_name='Signed by partner'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0007_auto_20180424_1916.py b/src/etools/applications/partners/migrations/0007_auto_20180424_1916.py deleted file mode 100644 index 2e925df9e3..0000000000 --- a/src/etools/applications/partners/migrations/0007_auto_20180424_1916.py +++ /dev/null @@ -1,106 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-24 19:16 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0006_auto_20180411_1702'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='names_of_other_agencies', - field=models.CharField(blank=True, help_text='List the names of the other agencies they have worked with', - max_length=255, null=True, verbose_name='Other Agencies'), - ), - migrations.AlterField( - model_name='assessment', - name='notes', - field=models.CharField(blank=True, help_text='Note any special requests to be considered during the assessment', - max_length=255, null=True, verbose_name='Special requests'), - ), - migrations.AlterField( - model_name='fundingcommitment', - name='fc_ref', - field=models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='Reference'), - ), - migrations.AlterField( - model_name='intervention', - name='number', - field=models.CharField(blank=True, max_length=64, null=True, unique=True, verbose_name='Reference Number'), - ), - migrations.AlterField( - model_name='intervention', - name='population_focus', - field=models.CharField(blank=True, max_length=130, null=True, verbose_name='Population Focus'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='other_description', - field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Description'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='address', - field=models.TextField(blank=True, null=True, verbose_name='Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='alternate_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Alternate Name'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='city', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='City'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='country', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Country'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='email', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Email Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='phone_number', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='postal_code', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Postal Code'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='rating', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Moderate', 'Medium'), ( - 'Low', 'Low'), ('Non-Assessed', 'Non Required')], max_length=50, null=True, verbose_name='Risk Rating'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='street_address', - field=models.CharField(blank=True, max_length=500, null=True, verbose_name='Street Address'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='type_of_assessment', - field=models.CharField(max_length=50, null=True, verbose_name='Assessment Type'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='phone', - field=models.CharField(blank=True, default='', max_length=64, null=True, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='title', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Title'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0008_auto_20180510_1905.py b/src/etools/applications/partners/migrations/0008_auto_20180510_1905.py deleted file mode 100644 index a616432dc4..0000000000 --- a/src/etools/applications/partners/migrations/0008_auto_20180510_1905.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-10 19:05 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0007_auto_20180424_1916'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerorganization', - name='rating', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Non Required', 'Non Required')], max_length=50, null=True, verbose_name='Risk Rating'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0009_auto_20180510_1940.py b/src/etools/applications/partners/migrations/0009_auto_20180510_1940.py deleted file mode 100644 index 3eb43d07ef..0000000000 --- a/src/etools/applications/partners/migrations/0009_auto_20180510_1940.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-10 19:40 -from django.db import migrations - - -def update_partners_rating(apps, schema_editor): - PartnerOrganization = apps.get_model("partners", "PartnerOrganization") - PartnerOrganization.objects.filter(rating='Moderate').update(rating='Medium') - PartnerOrganization.objects.filter(rating='Non-Assessed').update(rating='Not Required') - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0008_auto_20180510_1905'), - ] - - operations = [ - migrations.RunPython( - update_partners_rating, - reverse_code=migrations.RunPython.noop, - ) - ] diff --git a/src/etools/applications/partners/migrations/0010_auto_20180514_1104.py b/src/etools/applications/partners/migrations/0010_auto_20180514_1104.py deleted file mode 100644 index d23089e170..0000000000 --- a/src/etools/applications/partners/migrations/0010_auto_20180514_1104.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-14 11:04 -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import etools.applications.core.urlresolvers -import model_utils.fields - - -def migrate_data(apps, schema): - PartnerPlannedVisits = apps.get_model("partners", "partnerplannedvisits") - InterventionPlannedVisits = apps.get_model( - "partners", - "interventionplannedvisits" - ) - for visit in InterventionPlannedVisits.objects.all(): - partner = visit.intervention.agreement.partner - partner_visit, _ = PartnerPlannedVisits.objects.get_or_create( - partner=partner, - year=visit.year, - ) - partner_visit.programmatic_q1 += visit.programmatic_q1 - partner_visit.programmatic_q2 += visit.programmatic_q2 - partner_visit.programmatic_q3 += visit.programmatic_q3 - partner_visit.programmatic_q4 += visit.programmatic_q4 - partner_visit.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0009_auto_20180510_1940'), - ] - - operations = [ - migrations.CreateModel( - name='PartnerPlannedVisits', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('year', models.IntegerField(default=etools.libraries.pythonlib.datetime.get_current_year, verbose_name='Year')), - ('programmatic_q1', models.IntegerField(default=0, verbose_name='Programmatic Q1')), - ('programmatic_q2', models.IntegerField(default=0, verbose_name='Programmatic Q2')), - ('programmatic_q3', models.IntegerField(default=0, verbose_name='Programmatic Q3')), - ('programmatic_q4', models.IntegerField(default=0, verbose_name='Programmatic Q4')), - ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='planned_visits', to='partners.PartnerOrganization', verbose_name='Partner')), - ], - options={ - 'verbose_name_plural': 'Partner Planned Visits', - }, - ), - migrations.AlterUniqueTogether( - name='partnerplannedvisits', - unique_together=set([('partner', 'year')]), - ), - migrations.RunPython(migrate_data, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/partners/migrations/0011_auto_20180521_1552.py b/src/etools/applications/partners/migrations/0011_auto_20180521_1552.py deleted file mode 100644 index 8eacb0119a..0000000000 --- a/src/etools/applications/partners/migrations/0011_auto_20180521_1552.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 1.11.11 on 2018-05-21 15:52 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0010_auto_20180514_1104'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerorganization', - name='rating', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Not Required', 'Not Required')], max_length=50, null=True, verbose_name='Risk Rating'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0012_partnerorganization_manually_blocked.py b/src/etools/applications/partners/migrations/0012_partnerorganization_manually_blocked.py deleted file mode 100644 index 9a68cdf492..0000000000 --- a/src/etools/applications/partners/migrations/0012_partnerorganization_manually_blocked.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-31 14:15 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0011_auto_20180521_1552'), - ] - - operations = [ - migrations.AddField( - model_name='partnerorganization', - name='manually_blocked', - field=models.BooleanField(default=False, verbose_name='Manually Hidden'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0013_auto_20180611_1823.py b/src/etools/applications/partners/migrations/0013_auto_20180611_1823.py deleted file mode 100644 index bf3bb6ee8e..0000000000 --- a/src/etools/applications/partners/migrations/0013_auto_20180611_1823.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 1.10.8 on 2018-06-11 18:23 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0012_partnerorganization_manually_blocked'), - ] - - operations = [ - migrations.RenameField( - model_name='plannedengagement', - old_name='spot_check_follow_up_q1', - new_name='spot_check_planned_q1', - ), - migrations.RenameField( - model_name='plannedengagement', - old_name='spot_check_follow_up_q2', - new_name='spot_check_planned_q2', - ), - migrations.RenameField( - model_name='plannedengagement', - old_name='spot_check_follow_up_q3', - new_name='spot_check_planned_q3', - ), - migrations.RenameField( - model_name='plannedengagement', - old_name='spot_check_follow_up_q4', - new_name='spot_check_planned_q4', - ), - migrations.RemoveField( - model_name='plannedengagement', - name='spot_check_mr', - ), - migrations.AddField( - model_name='plannedengagement', - name='spot_check_follow_up', - field=models.IntegerField(default=0, verbose_name='Spot Check Follow Up Required'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0014_auto_20180716_1547.py b/src/etools/applications/partners/migrations/0014_auto_20180716_1547.py deleted file mode 100644 index bcda8838f7..0000000000 --- a/src/etools/applications/partners/migrations/0014_auto_20180716_1547.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-16 15:47 -from __future__ import unicode_literals - -from django.db import migrations, models - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0013_auto_20180611_1823'), - ] - - operations = [ - migrations.AddField( - model_name='agreement', - name='reference_number_year', - field=models.IntegerField(default=2018), - preserve_default=False, - ), - migrations.AddField( - model_name='agreement', - name='special_conditions_pca', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='intervention', - name='reference_number_year', - field=models.IntegerField(null=True), - ), - ] diff --git a/src/etools/applications/partners/migrations/0015_ref_number_year.py b/src/etools/applications/partners/migrations/0015_ref_number_year.py deleted file mode 100644 index 61abf6203a..0000000000 --- a/src/etools/applications/partners/migrations/0015_ref_number_year.py +++ /dev/null @@ -1,60 +0,0 @@ -from __future__ import unicode_literals - -from django.db import migrations, models - -def populate_agreement_ref_num(apps, schema): - import re - from django.db import IntegrityError - - Agreement = apps.get_model("partners", "Agreement") - - for a in Agreement.view_objects.all(): - find = re.findall(r'\d{4}', a.agreement_number) - try: - ref_number_str = find[0] - a.reference_number_year = int(ref_number_str) - assert 1950 < a.reference_number_year < 2100 - a.save() - except IntegrityError: - if a.status in ['Signed', 'Suspended']: - raise - # otherwise we don't care - except (IndexError, AssertionError): - # could not find a reference number: - if a.status in ['Signed', 'Suspended']: - raise - - -def populate_intervention_ref_num(apps, schema): - import re - from django.db import IntegrityError - Intervention = apps.get_model("partners", "Intervention") - - for i in Intervention.objects.exclude(document_type="SSFA"): - find = re.findall(r'\d{4}', i.number) - try: - ref_number_str = find[0] - i.reference_number_year = int(ref_number_str) - assert 1950 < i.reference_number_year < 2100 - i.save() - except IntegrityError: - if i.status in ['Signed', 'Active', 'Suspended', 'Ended']: - raise - # otherwise we don't care - except (IndexError, AssertionError): - # could not find a reference number: - if i.status in ['Signed', 'Active', 'Suspended', 'Ended']: - raise - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0014_auto_20180716_1547'), - ] - - operations = [ - # migrations.AlterModelManagers(name='Agreement', managers=['objects', models.manager.Manager()]), - # migrations.AlterModelManagers(name='Intervention', managers=['objects', models.manager.Manager()]), - migrations.RunPython(populate_agreement_ref_num, reverse_code=migrations.RunPython.noop), - migrations.RunPython(populate_intervention_ref_num, reverse_code=migrations.RunPython.noop) - ] \ No newline at end of file diff --git a/src/etools/applications/partners/migrations/0016_auto_20180717_0700.py b/src/etools/applications/partners/migrations/0016_auto_20180717_0700.py deleted file mode 100644 index b7ed118074..0000000000 --- a/src/etools/applications/partners/migrations/0016_auto_20180717_0700.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-17 07:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0015_ref_number_year'), - ] - - operations = [ - migrations.AlterField( - model_name='agreement', - name='special_conditions_pca', - field=models.BooleanField(default=False, verbose_name='Special Conditions PCA'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0017_corevaluesassessment.py b/src/etools/applications/partners/migrations/0017_corevaluesassessment.py deleted file mode 100644 index abba620b4b..0000000000 --- a/src/etools/applications/partners/migrations/0017_corevaluesassessment.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-17 15:35 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0016_auto_20180717_0700'), - ] - - operations = [ - migrations.CreateModel( - name='CoreValuesAssessment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('date', models.DateField(blank=True, null=True, verbose_name='Date positively assessed against core values')), - ('assessment', models.FileField(blank=True, help_text='Only required for CSO partners', max_length=1024, null=True, upload_to='partners/core_values/', verbose_name='Core Values Assessment')), - ('archived', models.BooleanField(default=False)), - ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='core_values_assessments', to='partners.PartnerOrganization', verbose_name='Partner')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/etools/applications/partners/migrations/0018_auto_20180717_1536.py b/src/etools/applications/partners/migrations/0018_auto_20180717_1536.py deleted file mode 100644 index 391232cab7..0000000000 --- a/src/etools/applications/partners/migrations/0018_auto_20180717_1536.py +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-17 15:36 -from __future__ import unicode_literals - -from django.db import migrations - - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0017_corevaluesassessment'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0019_intervention_signed_by_unicef.py b/src/etools/applications/partners/migrations/0019_intervention_signed_by_unicef.py deleted file mode 100644 index c17cb1e472..0000000000 --- a/src/etools/applications/partners/migrations/0019_intervention_signed_by_unicef.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-19 18:14 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0018_auto_20180717_1536'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='signed_by_unicef', - field=models.BooleanField(default=False, verbose_name='Signed By UNICEF Authorized Officer'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0020_auto_20180719_1815.py b/src/etools/applications/partners/migrations/0020_auto_20180719_1815.py deleted file mode 100644 index e8d761236a..0000000000 --- a/src/etools/applications/partners/migrations/0020_auto_20180719_1815.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-19 18:15 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0019_intervention_signed_by_unicef'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0021_auto_20180801_1643.py b/src/etools/applications/partners/migrations/0021_auto_20180801_1643.py deleted file mode 100644 index 600d6708ce..0000000000 --- a/src/etools/applications/partners/migrations/0021_auto_20180801_1643.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-01 16:43 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0020_auto_20180719_1815'), - ] - - operations = [ - migrations.AlterModelOptions( - name='agreementamendment', - options={'ordering': ('-created',)}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0022_remove_intervention_signed_by_unicef.py b/src/etools/applications/partners/migrations/0022_remove_intervention_signed_by_unicef.py deleted file mode 100644 index f10b3c3717..0000000000 --- a/src/etools/applications/partners/migrations/0022_remove_intervention_signed_by_unicef.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-10 13:55 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0021_auto_20180801_1643'), - ] - - operations = [ - migrations.RemoveField( - model_name='intervention', - name='signed_by_unicef', - ), - ] diff --git a/src/etools/applications/partners/migrations/0023_auto_20180814_1754.py b/src/etools/applications/partners/migrations/0023_auto_20180814_1754.py deleted file mode 100644 index 34398a0b7a..0000000000 --- a/src/etools/applications/partners/migrations/0023_auto_20180814_1754.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.0.8 on 2018-08-14 17:54 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0022_remove_intervention_signed_by_unicef'), - ] - - operations = [ - migrations.RemoveField( - model_name='fundingcommitment', - name='grant', - ), - migrations.DeleteModel( - name='FundingCommitment', - ), - ] diff --git a/src/etools/applications/partners/migrations/0024_remove_partnerorganization_core_values_assessment.py b/src/etools/applications/partners/migrations/0024_remove_partnerorganization_core_values_assessment.py deleted file mode 100644 index 559ae6ba25..0000000000 --- a/src/etools/applications/partners/migrations/0024_remove_partnerorganization_core_values_assessment.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-14 21:36 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0023_auto_20180814_1754'), - ] - - operations = [ - migrations.RemoveField( - model_name='partnerorganization', - name='core_values_assessment', - ), - ] diff --git a/src/etools/applications/partners/migrations/0025_auto_20180815_2026.py b/src/etools/applications/partners/migrations/0025_auto_20180815_2026.py deleted file mode 100644 index 9f45900bed..0000000000 --- a/src/etools/applications/partners/migrations/0025_auto_20180815_2026.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-15 20:26 -from __future__ import unicode_literals - -from django.db import migrations, models -import etools.applications.partners.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0024_remove_partnerorganization_core_values_assessment'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='activation_letter', - field=models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_intervention_file_path, verbose_name='Activation Document for Contingency PDs'), - ), - migrations.AddField( - model_name='intervention', - name='termination_doc', - field=models.FileField(blank=True, max_length=1024, null=True, upload_to=etools.applications.partners.models.get_intervention_file_path, verbose_name='Termination document for PDs'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0026_save_interventions.py b/src/etools/applications/partners/migrations/0026_save_interventions.py deleted file mode 100644 index d63af1226a..0000000000 --- a/src/etools/applications/partners/migrations/0026_save_interventions.py +++ /dev/null @@ -1,25 +0,0 @@ -from __future__ import unicode_literals - -from django.db import migrations - - -def fix_interventions(apps, schema): - from etools.applications.partners.models import Intervention - for i in Intervention.objects.all(): - try: - i.save() - except: - print(i.reference_number, i.id, i.status) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0025_auto_20180815_2026'), - ] - - operations = [ - # Migration is commented out due to changes in model and subsequent - # migrations needed to have run - # migrations.RunPython(migrations.RunPython.noop, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/partners/migrations/0027_auto_20180914_1238.py b/src/etools/applications/partners/migrations/0027_auto_20180914_1238.py deleted file mode 100644 index 84dc43db29..0000000000 --- a/src/etools/applications/partners/migrations/0027_auto_20180914_1238.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 1.10.8 on 2018-09-14 12:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0026_save_interventions'), - ] - - operations = [ - migrations.AddField( - model_name='partnerorganization', - name='outstanding_dct_amount_6_to_9_months_usd', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Outstanding DCT 6/9 months', max_digits=20, null=True, verbose_name='Outstanding DCT 6/9 months'), - ), - migrations.AddField( - model_name='partnerorganization', - name='outstanding_dct_amount_more_than_9_months_usd', - field=models.DecimalField(blank=True, decimal_places=2, help_text='Outstanding DCT more than 9 months', max_digits=20, null=True, verbose_name='Outstanding DCT more than 9 months'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0028_auto_20181108_1503.py b/src/etools/applications/partners/migrations/0028_auto_20181108_1503.py deleted file mode 100644 index 78fd7a42e7..0000000000 --- a/src/etools/applications/partners/migrations/0028_auto_20181108_1503.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 1.10.8 on 2018-11-08 15:03 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0027_auto_20180914_1238'), - ] - - operations = [ - migrations.RemoveField( - model_name='interventionsectorlocationlink', - name='intervention', - ), - migrations.RemoveField( - model_name='interventionsectorlocationlink', - name='locations', - ), - migrations.RemoveField( - model_name='interventionsectorlocationlink', - name='sector', - ), - migrations.DeleteModel( - name='InterventionSectorLocationLink', - ), - ] diff --git a/src/etools/applications/partners/migrations/0029_interventionattachment_active.py b/src/etools/applications/partners/migrations/0029_interventionattachment_active.py deleted file mode 100644 index 985799ab56..0000000000 --- a/src/etools/applications/partners/migrations/0029_interventionattachment_active.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-11-14 07:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0028_auto_20181108_1503'), - ] - - operations = [ - migrations.AddField( - model_name='interventionattachment', - name='active', - field=models.BooleanField(default=True), - ), - ] diff --git a/src/etools/applications/partners/migrations/0030_assessment_active.py b/src/etools/applications/partners/migrations/0030_assessment_active.py deleted file mode 100644 index 986b1247e6..0000000000 --- a/src/etools/applications/partners/migrations/0030_assessment_active.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-12-05 13:16 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0029_interventionattachment_active'), - ] - - operations = [ - migrations.AddField( - model_name='assessment', - name='active', - field=models.BooleanField(default=True), - ), - ] diff --git a/src/etools/applications/partners/migrations/0031_auto_20190122_1412.py b/src/etools/applications/partners/migrations/0031_auto_20190122_1412.py deleted file mode 100644 index 4876a59639..0000000000 --- a/src/etools/applications/partners/migrations/0031_auto_20190122_1412.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-22 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0030_assessment_active'), - ] - - operations = [ - migrations.AlterModelOptions( - name='agreementamendment', - options={'ordering': ('-created',), 'verbose_name': 'Amendment', 'verbose_name_plural': 'Agreement amendments'}, - ), - migrations.AlterModelOptions( - name='interventionamendment', - options={'verbose_name': 'Amendment', 'verbose_name_plural': 'Intervention amendments'}, - ), - migrations.AlterModelOptions( - name='interventionbudget', - options={'verbose_name_plural': 'Intervention budget'}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0032_auto_20190301_1029.py b/src/etools/applications/partners/migrations/0032_auto_20190301_1029.py deleted file mode 100644 index 95f0287a9a..0000000000 --- a/src/etools/applications/partners/migrations/0032_auto_20190301_1029.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 2.0.9 on 2019-03-01 10:29 - -from django.db import migrations, models - - -def update_document_type(apps, schema_editor): - Intervention = apps.get_model("partners", "intervention") - Intervention.objects.filter(document_type="SHPD").update( - document_type="HPD", - ) - - -def reset_document_type(apps, schema_editor): - Intervention = apps.get_model("partners", "intervention") - Intervention.objects.filter(document_type="HPD").update( - document_type="SHPD", - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0031_auto_20190122_1412'), - ] - - operations = [ - migrations.RunPython( - update_document_type, - reverse_code=reset_document_type, - ), - migrations.AlterField( - model_name='intervention', - name='document_type', - field=models.CharField(choices=[('PD', 'Programme Document'), ('HPD', 'Humanitarian Programme Document'), ('SSFA', 'SSFA')], max_length=255, verbose_name='Document Type'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0033_auto_20190311_1503.py b/src/etools/applications/partners/migrations/0033_auto_20190311_1503.py deleted file mode 100644 index 805c95dbe1..0000000000 --- a/src/etools/applications/partners/migrations/0033_auto_20190311_1503.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.1.5 on 2019-03-11 15:03 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0032_auto_20190301_1029'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionamendment', - name='types', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('admin_error', 'Administrative error (correction)'), ('budget_lte_20', 'Budget <= 20%'), ('budget_gt_20', 'Budget > 20'), ('change', 'Changes to planned results'), ('no_cost', 'No cost extension'), ('other', 'Other'), ('dates', 'Dates'), ('results', 'Results'), ('budget', 'Budget')], max_length=50, verbose_name='Types'), size=None), - ), - ] diff --git a/src/etools/applications/partners/migrations/0034_auto_20190328_1251.py b/src/etools/applications/partners/migrations/0034_auto_20190328_1251.py deleted file mode 100644 index fe94e00b00..0000000000 --- a/src/etools/applications/partners/migrations/0034_auto_20190328_1251.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-28 12:51 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0033_auto_20190311_1503'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionamendment', - name='types', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('admin_error', 'Administrative error (correction)'), ('budget_lte_20', 'Budget <= 20%'), ('budget_gt_20', 'Budget > 20%'), ('change', 'Changes to planned results'), ('no_cost', 'No cost extension'), ('other', 'Other'), ('dates', 'Dates'), ('results', 'Results'), ('budget', 'Budget')], max_length=50, verbose_name='Types'), size=None), - ), - ] diff --git a/src/etools/applications/partners/migrations/0035_auto_20190404_0858.py b/src/etools/applications/partners/migrations/0035_auto_20190404_0858.py deleted file mode 100644 index d0cb20f215..0000000000 --- a/src/etools/applications/partners/migrations/0035_auto_20190404_0858.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2 on 2019-04-04 08:58 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0034_auto_20190328_1251'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionamendment', - name='types', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('admin_error', 'Type 1: Administrative error (correction)'), ('budget_lte_20', 'Type 2: Budget <= 20%'), ('budget_gt_20', 'Type 3: Budget > 20%'), ('change', 'Type 4: Changes to planned results'), ('no_cost', 'Type 5: No cost extension'), ('other', 'Type 6: Other'), ('dates', 'Dates'), ('results', 'Results'), ('budget', 'Budget')], max_length=50, verbose_name='Types'), size=None), - ), - ] diff --git a/src/etools/applications/partners/migrations/0036_auto_20190418_1832.py b/src/etools/applications/partners/migrations/0036_auto_20190418_1832.py deleted file mode 100644 index 6900773af4..0000000000 --- a/src/etools/applications/partners/migrations/0036_auto_20190418_1832.py +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Django 2.1.7 on 2019-04-18 18:32 - -from django.db import connection, migrations, ProgrammingError - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0035_auto_20190404_0858'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0037_auto_20190502_1407.py b/src/etools/applications/partners/migrations/0037_auto_20190502_1407.py deleted file mode 100644 index cf8c3a362e..0000000000 --- a/src/etools/applications/partners/migrations/0037_auto_20190502_1407.py +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Django 2.1.8 on 2019-05-02 14:07 - -from django.db import connection, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0036_auto_20190418_1832'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0038_auto_20190620_2024.py b/src/etools/applications/partners/migrations/0038_auto_20190620_2024.py deleted file mode 100644 index 3bc6e2bd69..0000000000 --- a/src/etools/applications/partners/migrations/0038_auto_20190620_2024.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.2 on 2019-06-20 20:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0037_auto_20190502_1407'), - ] - - operations = [ - migrations.AlterField( - model_name='filetype', - name='name', - field=models.CharField(choices=[('FACE', 'FACE'), ('Progress Report', 'Progress Report'), ('Final Partnership Review', 'Final Partnership Review'), ('Correspondence', 'Correspondence'), ('Supply/Distribution Plan', 'Supply/Distribution Plan'), ('Other', 'Other')], max_length=64, unique=True, verbose_name='Name'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0039_auto_20191106_1345.py b/src/etools/applications/partners/migrations/0039_auto_20191106_1345.py deleted file mode 100644 index 9e246591cb..0000000000 --- a/src/etools/applications/partners/migrations/0039_auto_20191106_1345.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.6 on 2019-11-06 13:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0038_auto_20190620_2024'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerstaffmember', - name='title', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Title'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0040_auto_20191011_1429.py b/src/etools/applications/partners/migrations/0040_auto_20191011_1429.py deleted file mode 100644 index 6c95ae2ec7..0000000000 --- a/src/etools/applications/partners/migrations/0040_auto_20191011_1429.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-11 14:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0021_auto_20191011_1201'), - ('partners', '0039_auto_20191106_1345'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='offices', - field=models.ManyToManyField(blank=True, related_name='_intervention_offices_+', to='reports.Office', verbose_name='Office'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0041_auto_20191209_2039.py b/src/etools/applications/partners/migrations/0041_auto_20191209_2039.py deleted file mode 100644 index d3f92f0fc2..0000000000 --- a/src/etools/applications/partners/migrations/0041_auto_20191209_2039.py +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Django 2.2.8 on 2019-12-09 20:39 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0040_auto_20191011_1429'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0042_auto_20200414_1439.py b/src/etools/applications/partners/migrations/0042_auto_20200414_1439.py deleted file mode 100644 index a69874079b..0000000000 --- a/src/etools/applications/partners/migrations/0042_auto_20200414_1439.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.2.7 on 2020-04-14 14:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0041_auto_20191209_2039'), - ] - - operations = [ - migrations.AddField( - model_name='partnerorganization', - name='highest_risk_rating_name', - field=models.CharField(verbose_name="Highest Risk Rating Name", blank=True, default='', max_length=150), - ), - migrations.AddField( - model_name='partnerorganization', - name='highest_risk_rating_type', - field=models.CharField(verbose_name="Highest Risk Rating Type", blank=True, default='', max_length=150), - ), - migrations.AddField( - model_name='partnerorganization', - name='psea_assessment_date', - field=models.DateTimeField(verbose_name="Last PSEA Assess. Date", null=True, blank=True), - ), - migrations.AddField( - model_name='partnerorganization', - name='sea_risk_rating_name', - field=models.CharField(verbose_name="PSEA Risk Rating", blank=True, default='', max_length=150), - ), - ] diff --git a/src/etools/applications/partners/migrations/0043_auto_20200729_2123.py b/src/etools/applications/partners/migrations/0043_auto_20200729_2123.py deleted file mode 100644 index dc524641db..0000000000 --- a/src/etools/applications/partners/migrations/0043_auto_20200729_2123.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-29 21:23 - -from django.db import migrations - -from etools.libraries.djangolib.fields import CurrencyField - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0042_auto_20200414_1439'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionbudget', - name='currency', - field=CurrencyField(blank=True, choices=[('GIP', 'GIP'), ('KPW', 'KPW'), ('XEU', 'XEU'), ('BHD', 'BHD'), ('BIF', 'BIF'), ('BMD', 'BMD'), ('BSD', 'BSD'), ('AFN', 'AFN'), ('ALL', 'ALL'), ('AMD', 'AMD'), ('AUD', 'AUD'), ('AZN', 'AZN'), ('BAM', 'BAM'), ('BBD', 'BBD'), ('BDT', 'BDT'), ('BZD', 'BZD'), ('CUP1', 'CUP1'), ('BTN', 'BTN'), ('ZWL', 'ZWL'), ('AWG', 'AWG'), ('CUC', 'CUC'), ('VEF01', 'VEF01'), ('BND', 'BND'), ('BRL', 'BRL'), ('ARS', 'ARS'), ('ETB', 'ETB'), ('EUR', 'EUR'), ('FJD', 'FJD'), ('GBP', 'GBP'), ('GEL', 'GEL'), ('GHS', 'GHS'), ('GNF', 'GNF'), ('GTQ', 'GTQ'), ('GYD', 'GYD'), ('HNL', 'HNL'), ('CAD', 'CAD'), ('CDF', 'CDF'), ('CLP', 'CLP'), ('CNY', 'CNY'), ('COP', 'COP'), ('CRC', 'CRC'), ('CUP', 'CUP'), ('CVE', 'CVE'), ('DJF', 'DJF'), ('DKK', 'DKK'), ('DOP', 'DOP'), ('DZD', 'DZD'), ('EGP', 'EGP'), ('HRK', 'HRK'), ('LVL', 'LVL'), ('LYD', 'LYD'), ('MAD', 'MAD'), ('MGA', 'MGA'), ('MKD', 'MKD'), ('KWD', 'KWD'), ('KYD', 'KYD'), ('LBP', 'LBP'), ('LKR', 'LKR'), ('MDL', 'MDL'), ('KZT', 'KZT'), ('LRD', 'LRD'), ('BOB', 'BOB'), ('HKD', 'HKD'), ('CHF', 'CHF'), ('KES', 'KES'), ('MYR', 'MYR'), ('NGN', 'NGN'), ('KMF', 'KMF'), ('SCR', 'SCR'), ('SEK', 'SEK'), ('TTD', 'TTD'), ('PKR', 'PKR'), ('NIO', 'NIO'), ('RWF', 'RWF'), ('BWP', 'BWP'), ('JMD', 'JMD'), ('TJS', 'TJS'), ('UYU', 'UYU'), ('RON', 'RON'), ('PYG', 'PYG'), ('SYP', 'SYP'), ('LAK', 'LAK'), ('ERN', 'ERN'), ('SLL', 'SLL'), ('PLN', 'PLN'), ('JOD', 'JOD'), ('ILS', 'ILS'), ('AED', 'AED'), ('NPR', 'NPR'), ('NZD', 'NZD'), ('SGD', 'SGD'), ('JPY', 'JPY'), ('PAB', 'PAB'), ('ZMW', 'ZMW'), ('CZK', 'CZK'), ('SOS', 'SOS'), ('LTL', 'LTL'), ('KGS', 'KGS'), ('SHP', 'SHP'), ('BGN', 'BGN'), ('TOP', 'TOP'), ('MVR', 'MVR'), ('VEF02', 'VEF02'), ('TMT', 'TMT'), ('GMD', 'GMD'), ('MZN', 'MZN'), ('RSD', 'RSD'), ('MWK', 'MWK'), ('PGK', 'PGK'), ('MXN', 'MXN'), ('XAF', 'XAF'), ('VND', 'VND'), ('INR', 'INR'), ('NOK', 'NOK'), ('XPF', 'XPF'), ('SSP', 'SSP'), ('IQD', 'IQD'), ('SRD', 'SRD'), ('SAR', 'SAR'), ('XCD', 'XCD'), ('IRR', 'IRR'), ('KPW01', 'KPW01'), ('HTG', 'HTG'), ('IDR', 'IDR'), ('XOF', 'XOF'), ('ISK', 'ISK'), ('ANG', 'ANG'), ('NAD', 'NAD'), ('MMK', 'MMK'), ('STD', 'STD'), ('VUV', 'VUV'), ('LSL', 'LSL'), ('SVC', 'SVC'), ('KHR', 'KHR'), ('SZL', 'SZL'), ('RUB', 'RUB'), ('UAH', 'UAH'), ('UGX', 'UGX'), ('THB', 'THB'), ('AOA', 'AOA'), ('YER', 'YER'), ('USD', 'USD'), ('UZS', 'UZS'), ('OMR', 'OMR'), ('SBD', 'SBD'), ('TZS', 'TZS'), ('SDG', 'SDG'), ('WST', 'WST'), ('QAR', 'QAR'), ('MOP', 'MOP'), ('MRU', 'MRU'), ('VEF', 'VEF'), ('TRY', 'TRY'), ('ZAR', 'ZAR'), ('HUF', 'HUF'), ('MUR', 'MUR'), ('PHP', 'PHP'), ('BYN', 'BYN'), ('KRW', 'KRW'), ('TND', 'TND'), ('MNT', 'MNT'), ('PEN', 'PEN')], default='', max_length=5, verbose_name='Currency'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0044_auto_20200701_1544.py b/src/etools/applications/partners/migrations/0044_auto_20200701_1544.py deleted file mode 100644 index 228431f5e2..0000000000 --- a/src/etools/applications/partners/migrations/0044_auto_20200701_1544.py +++ /dev/null @@ -1,101 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-01 15:44 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0043_auto_20200729_2123'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='budget_owner', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='budget_owner+', to=settings.AUTH_USER_MODEL, verbose_name='Budget Owner'), - ), - migrations.AddField( - model_name='intervention', - name='cash_transfer_modalities', - field=models.CharField(choices=[('payment', 'Direct Payment'), ('reimburse', 'Reimbursement'), ('direct', 'Direct Cash Transfer')], default='direct', max_length=50, verbose_name='Cash Transfer Modalities'), - ), - migrations.AddField( - model_name='intervention', - name='context', - field=models.TextField(blank=True, verbose_name='Context'), - ), - migrations.AddField( - model_name='intervention', - name='date_sent_to_partner', - field=models.DateField(blank=True, null=True, verbose_name='Date first sent to Partner'), - ), - migrations.AddField( - model_name='intervention', - name='equity_narrative', - field=models.TextField(blank=True, verbose_name='Equity Narrative'), - ), - migrations.AddField( - model_name='intervention', - name='equity_rating', - field=models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Equity Rating'), - ), - migrations.AddField( - model_name='intervention', - name='gender_narrative', - field=models.TextField(blank=True, verbose_name='Gender Narrative'), - ), - migrations.AddField( - model_name='intervention', - name='gender_rating', - field=models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Gender Rating'), - ), - migrations.AddField( - model_name='intervention', - name='hq_support_cost', - field=models.DecimalField(decimal_places=1, default=0.0, max_digits=2, verbose_name='HQ Support Cost'), - ), - migrations.AddField( - model_name='intervention', - name='implementation_strategy', - field=models.TextField(blank=True, verbose_name='Implementation Strategy'), - ), - migrations.AddField( - model_name='intervention', - name='ip_program_contribution', - field=models.TextField(blank=True, verbose_name='Partner Non-Financial Contribution to Programme'), - ), - migrations.AddField( - model_name='intervention', - name='partner_accepted', - field=models.BooleanField(default=False, verbose_name='Partner Accepted'), - ), - migrations.AddField( - model_name='intervention', - name='sustainability_narrative', - field=models.TextField(blank=True, verbose_name='Sustainability Narrative'), - ), - migrations.AddField( - model_name='intervention', - name='sustainability_rating', - field=models.CharField(choices=[('none', 'None'), ('marginal', 'Marginal'), ('significant', 'Significant'), ('principal', 'Principal')], default='none', max_length=50, verbose_name='Sustainability Rating'), - ), - migrations.AddField( - model_name='intervention', - name='unicef_accepted', - field=models.BooleanField(default=False, verbose_name='UNICEF Accepted'), - ), - migrations.AddField( - model_name='intervention', - name='unicef_court', - field=models.BooleanField(default=True, verbose_name='UNICEF Editing'), - ), - migrations.AddField( - model_name='intervention', - name='unicef_review_type', - field=models.CharField(choices=[('none', 'None'), ('prc', 'PRC'), ('non-prc', 'Non-PRC')], default='none', max_length=50, verbose_name='UNICEF Review Type'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0044_auto_20200914_1428.py b/src/etools/applications/partners/migrations/0044_auto_20200914_1428.py deleted file mode 100644 index 6d8abc31de..0000000000 --- a/src/etools/applications/partners/migrations/0044_auto_20200914_1428.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-14 14:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0043_auto_20200729_2123'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='cfei_number', - field=models.CharField(blank=True, default='', max_length=150, null=True, verbose_name='UNPP Number'), - ) - ] diff --git a/src/etools/applications/partners/migrations/0045_intervention_humanitarian_flag.py b/src/etools/applications/partners/migrations/0045_intervention_humanitarian_flag.py deleted file mode 100644 index 379ecc3330..0000000000 --- a/src/etools/applications/partners/migrations/0045_intervention_humanitarian_flag.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-08 13:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0044_auto_20200701_1544'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='humanitarian_flag', - field=models.BooleanField(default=False, verbose_name='Humanitarian'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0045_partnerstaffmember_user.py b/src/etools/applications/partners/migrations/0045_partnerstaffmember_user.py deleted file mode 100644 index 822c91f3d6..0000000000 --- a/src/etools/applications/partners/migrations/0045_partnerstaffmember_user.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-24 14:50 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0044_auto_20200914_1428'), - ] - - operations = [ - migrations.AddField( - model_name='partnerstaffmember', - name='user', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='partner_staff_member', to=settings.AUTH_USER_MODEL, verbose_name='User'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0046_auto_20200924_1453.py b/src/etools/applications/partners/migrations/0046_auto_20200924_1453.py deleted file mode 100644 index 3f03430ac1..0000000000 --- a/src/etools/applications/partners/migrations/0046_auto_20200924_1453.py +++ /dev/null @@ -1,60 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-24 14:53 -import itertools -import random - -from django.conf import settings -from django.core.exceptions import FieldDoesNotExist -from django.db import migrations, models -import django.db.models.deletion -from string import ascii_lowercase - - - -def migrate_staff_members_to_fk(apps, schema_editor): - User = apps.get_model(settings.AUTH_USER_MODEL) - UserProfile = apps.get_model('users', 'UserProfile') - PartnerStaffMember = apps.get_model('partners', 'PartnerStaffMember') - - try: - UserProfile._meta.get_field('_partner_staff_member') - except FieldDoesNotExist: - # this field was already removed; nothing to do here - return - - # iterate over active users at first - for staff_member in itertools.chain( - PartnerStaffMember.objects.filter(active=True), - PartnerStaffMember.objects.filter(active=False) - ): - - user = User.objects.filter(email=staff_member.email).first() - - if not user and staff_member.active: - user = User.objects.create( - first_name=staff_member.first_name, - last_name=staff_member.last_name, - email=staff_member.email, - username=staff_member.email, - is_active=staff_member.active, - is_staff=False, - ) - UserProfile.objects.create( - user=user, - job_title=staff_member.title, - phone_number=staff_member.phone, - ) - staff_member.user = user - staff_member.save() - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0015_auto_20200924_1453'), - ('partners', '0045_partnerstaffmember_user'), - ] - - operations = [ - migrations.RunPython(migrate_staff_members_to_fk, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0046_interventionactivity_interventionactivityitem_interventionactivitytimeframe_interventionmanagementbu.py b/src/etools/applications/partners/migrations/0046_interventionactivity_interventionactivityitem_interventionactivitytimeframe_interventionmanagementbu.py deleted file mode 100644 index bc82847cac..0000000000 --- a/src/etools/applications/partners/migrations/0046_interventionactivity_interventionactivityitem_interventionactivitytimeframe_interventionmanagementbu.py +++ /dev/null @@ -1,116 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-15 15:01 - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0045_intervention_humanitarian_flag'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionActivity', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=150, verbose_name='Name')), - ('context_details', models.TextField(verbose_name='Context Details')), - ('unicef_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Cash')), - ('cso_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Cash')), - ('unicef_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Supplies')), - ('cso_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Supplies')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionSupplyItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('title', models.CharField(max_length=150, verbose_name='Title')), - ('unit_number', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Unit Number')), - ('unit_price', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Unit Price')), - ('total_price', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Total Price')), - ('other_mentions', models.TextField(blank=True, verbose_name='Other Mentions')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='supply_items', to='partners.Intervention', verbose_name='Intervention')), - ('result', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='partners.InterventionResultLink', verbose_name='Result')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionRisk', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('risk_type', models.CharField(choices=[('environment', 'Social & Environmental'), ('financial', 'Financial Operational'), ('organizational', 'Organizational'), ('political', 'Political Strategic'), ('security', 'Safety & security')], max_length=50, verbose_name='Risk Type')), - ('mitigation_measures', models.TextField()), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionManagementBudget', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('act1_unicef', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 1 UNICEF')), - ('act1_partner', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 1 Partner')), - ('act2_unicef', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 2 UNICEF')), - ('act2_partner', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 2 Partner')), - ('act3_unicef', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 3 UNICEF')), - ('act3_partner', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Account 3 Partner')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='management_budgets', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionActivityTimeFrame', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('start_date', models.DateField(verbose_name='Start Date')), - ('end_date', models.DateField(verbose_name='End Date')), - ('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='time_frames', to='partners.InterventionActivity', verbose_name='Activity')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionActivityItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=150, verbose_name='Name')), - ('other_details', models.TextField(verbose_name='Context Details')), - ('unicef_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Cash')), - ('cso_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Cash')), - ('unicef_suppies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Supplies')), - ('cso_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Supplies')), - ('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='partners.InterventionActivity', verbose_name='Activity')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/etools/applications/partners/migrations/0047_auto_20200716_1733.py b/src/etools/applications/partners/migrations/0047_auto_20200716_1733.py deleted file mode 100644 index 41afd56ec8..0000000000 --- a/src/etools/applications/partners/migrations/0047_auto_20200716_1733.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-16 17:33 - -from django.db import migrations -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0046_interventionactivity_interventionactivityitem_interventionactivitytimeframe_interventionmanagementbu'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='status', - field=django_fsm.FSMField(blank=True, choices=[('draft', 'Draft'), ('development', 'Development'), ('signed', 'Signed'), ('active', 'Active'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='development', max_length=32, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0047_auto_20210211_1724.py b/src/etools/applications/partners/migrations/0047_auto_20210211_1724.py deleted file mode 100644 index ca1daf88f6..0000000000 --- a/src/etools/applications/partners/migrations/0047_auto_20210211_1724.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.11 on 2021-02-11 17:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0046_auto_20200924_1453'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerorganization', - name='highest_risk_rating_name', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Not Required', 'Not Required'), ('High Risk Assumed', 'High Risk Assumed'), ('Low Risk Assumed', 'Low Risk Assumed'), ('Not Assessed', 'Not Assessed')], default='', max_length=150, verbose_name='Highest Risk Rating Name'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0048_auto_20200721_1030.py b/src/etools/applications/partners/migrations/0048_auto_20200721_1030.py deleted file mode 100644 index bc5a5b073d..0000000000 --- a/src/etools/applications/partners/migrations/0048_auto_20200721_1030.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-21 10:30 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0047_auto_20200716_1733'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionresultlink', - name='cp_output', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='intervention_links', to='reports.Result', verbose_name='CP Output'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0048_auto_20210506_0803.py b/src/etools/applications/partners/migrations/0048_auto_20210506_0803.py deleted file mode 100644 index 669d98f034..0000000000 --- a/src/etools/applications/partners/migrations/0048_auto_20210506_0803.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.2.20 on 2021-05-06 08:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0025_auto_20191220_2022'), - ('partners', '0047_auto_20210211_1724'), - ] - - operations = [ - migrations.AddField( - model_name='partnerorganization', - name='lead_office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reports.Office', verbose_name='Lead Office'), - ), - migrations.AddField( - model_name='partnerorganization', - name='lead_section', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='reports.Section', verbose_name='Lead Section'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0049_alter_interventionresultlink_unique_together.py b/src/etools/applications/partners/migrations/0049_alter_interventionresultlink_unique_together.py deleted file mode 100644 index b42027da26..0000000000 --- a/src/etools/applications/partners/migrations/0049_alter_interventionresultlink_unique_together.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2021-09-22 14:59 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0027_auto_20210714_2147'), - ('partners', '0048_auto_20210506_0803'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='interventionresultlink', - unique_together={('intervention', 'cp_output')}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0049_auto_20200724_0853.py b/src/etools/applications/partners/migrations/0049_auto_20200724_0853.py deleted file mode 100644 index 168538d756..0000000000 --- a/src/etools/applications/partners/migrations/0049_auto_20200724_0853.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-24 08:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0048_auto_20200721_1030'), - ] - - operations = [ - migrations.RemoveField( - model_name='interventionactivityitem', - name='activity', - ), - migrations.RemoveField( - model_name='interventionactivitytimeframe', - name='activity', - ), - migrations.DeleteModel( - name='InterventionActivity', - ), - migrations.DeleteModel( - name='InterventionActivityItem', - ), - migrations.DeleteModel( - name='InterventionActivityTimeFrame', - ), - ] diff --git a/src/etools/applications/partners/migrations/0050_auto_20200721_1842.py b/src/etools/applications/partners/migrations/0050_auto_20200721_1842.py deleted file mode 100644 index 88ecfc0207..0000000000 --- a/src/etools/applications/partners/migrations/0050_auto_20200721_1842.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-21 18:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0049_auto_20200724_0853'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='offices', - field=models.ManyToManyField(blank=True, related_name='office_interventions', to='reports.Office', verbose_name='Office'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0050_auto_20221121_1526.py b/src/etools/applications/partners/migrations/0050_auto_20221121_1526.py deleted file mode 100644 index f5bf9bc5d0..0000000000 --- a/src/etools/applications/partners/migrations/0050_auto_20221121_1526.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-21 15:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0049_alter_interventionresultlink_unique_together'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerorganization', - name='cso_type', - field=models.CharField(blank=True, choices=[('International', 'International'), ('National', 'National'), ('Community Based Organization', 'Community Based Organization'), ('Academic Institution', 'Academic Institution'), ('Red Cross/Red Crescent National Societies', 'Red Cross/Red Crescent National Societies')], max_length=50, null=True, verbose_name='CSO Type'), - ), - migrations.AlterField( - model_name='partnerorganization', - name='highest_risk_rating_name', - field=models.CharField(blank=True, choices=[('High', 'High'), ('Significant', 'Significant'), ('Medium', 'Medium'), ('Low', 'Low'), ('Not Required', 'Not Required'), ('Low Capacity (High Risk)', 'Low Capacity (High Risk)'), ('Medium Capacity (Moderate Risk)', 'Medium Capacity (Moderate Risk)'), ('Full Capacity (Low Risk)', 'Full Capacity (Low Risk)'), ('Low Capacity Assumed - Emergency', 'Low Capacity Assumed - Emergency'), ('No Contact with Beneficiaries', 'No Contact with Beneficiaries'), ('Not Assessed', 'Not Assessed')], default='', max_length=150, verbose_name='Highest Risk Rating Name'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0051_auto_20200722_1257.py b/src/etools/applications/partners/migrations/0051_auto_20200722_1257.py deleted file mode 100644 index 16fdcd52e6..0000000000 --- a/src/etools/applications/partners/migrations/0051_auto_20200722_1257.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-22 12:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0050_auto_20200721_1842'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='capacity_development', - field=models.TextField(blank=True, verbose_name='Capacity Development'), - ), - migrations.AddField( - model_name='intervention', - name='other_info', - field=models.TextField(blank=True, verbose_name='Other Info'), - ), - migrations.AddField( - model_name='intervention', - name='other_partners_involved', - field=models.TextField(blank=True, verbose_name='Other Partners Involved'), - ), - migrations.AddField( - model_name='intervention', - name='technical_guidance', - field=models.TextField(blank=True, verbose_name='Technical Guidance'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0052_auto_20200810_1300.py b/src/etools/applications/partners/migrations/0052_auto_20200810_1300.py deleted file mode 100644 index 8e2dcf753f..0000000000 --- a/src/etools/applications/partners/migrations/0052_auto_20200810_1300.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-10 13:00 - -from django.db import migrations -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0051_auto_20200722_1257'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='status', - field=django_fsm.FSMField(blank=True, choices=[('draft', 'Development'), ('signed', 'Signed'), ('active', 'Active'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0053_auto_20200810_1322.py b/src/etools/applications/partners/migrations/0053_auto_20200810_1322.py deleted file mode 100644 index 6709843a8e..0000000000 --- a/src/etools/applications/partners/migrations/0053_auto_20200810_1322.py +++ /dev/null @@ -1,69 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-10 13:22 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0052_auto_20200810_1300'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='cash_transfer_modalities', - field=models.CharField(choices=[('payment', 'Direct Payment'), ('reimbursement', 'Reimbursement'), ('dct', 'Direct Cash Transfer')], default='dct', max_length=50, verbose_name='Cash Transfer Modalities'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act1_partner', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Partner contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act1_unicef', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act2_partner', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Partner contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act2_unicef', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act3_partner', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Partner contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act3_unicef', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)'), - ), - migrations.AlterField( - model_name='interventionrisk', - name='risk_type', - field=models.CharField(choices=[('environment', 'Social & Environmental'), ('financial', 'Financial'), ('operational', 'Operational'), ('organizational', 'Organizational'), ('political', 'Political'), ('strategic', 'Strategic'), ('security', 'Safety & security')], max_length=50, verbose_name='Risk Type'), - ), - migrations.AlterField( - model_name='interventionsupplyitem', - name='result', - field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='partners.InterventionResultLink', verbose_name='Result'), - ), - migrations.AlterField( - model_name='interventionsupplyitem', - name='unit_number', - field=models.DecimalField(decimal_places=2, default=1, max_digits=20, verbose_name='Unit Number'), - ), - migrations.AlterField( - model_name='interventionsupplyitem', - name='unit_price', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Unit Price'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0054_auto_20200811_1320.py b/src/etools/applications/partners/migrations/0054_auto_20200811_1320.py deleted file mode 100644 index b930760a8a..0000000000 --- a/src/etools/applications/partners/migrations/0054_auto_20200811_1320.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-11 13:20 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0053_auto_20200810_1322'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionmanagementbudget', - name='intervention', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='management_budgets', to='partners.Intervention', verbose_name='Intervention'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0055_interventionbudget_programme_effectiveness.py b/src/etools/applications/partners/migrations/0055_interventionbudget_programme_effectiveness.py deleted file mode 100644 index 4d0b5031b2..0000000000 --- a/src/etools/applications/partners/migrations/0055_interventionbudget_programme_effectiveness.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-12 15:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0054_auto_20200811_1320'), - ] - - operations = [ - migrations.AddField( - model_name='interventionbudget', - name='programme_effectiveness', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Programme Effectiveness (%)'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0056_auto_20200820_1524.py b/src/etools/applications/partners/migrations/0056_auto_20200820_1524.py deleted file mode 100644 index de5909cd58..0000000000 --- a/src/etools/applications/partners/migrations/0056_auto_20200820_1524.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-20 15:24 - -from django.db import migrations -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0055_interventionbudget_programme_effectiveness'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='status', - field=django_fsm.FSMField(blank=True, choices=[('draft', 'Development'), ('review', 'Review'), ('signature', 'Signature'), ('signed', 'Signed'), ('active', 'Active'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0056_auto_20200824_0917.py b/src/etools/applications/partners/migrations/0056_auto_20200824_0917.py deleted file mode 100644 index 61745c6334..0000000000 --- a/src/etools/applications/partners/migrations/0056_auto_20200824_0917.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-24 09:17 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0055_interventionbudget_programme_effectiveness'), - ] - - operations = [ - migrations.AlterModelOptions( - name='interventionrisk', - options={'ordering': ('id',)}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0057_intervention_cash_transfer_modalities.py b/src/etools/applications/partners/migrations/0057_intervention_cash_transfer_modalities.py deleted file mode 100644 index f5d87d203f..0000000000 --- a/src/etools/applications/partners/migrations/0057_intervention_cash_transfer_modalities.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-27 14:05 - -import django.contrib.postgres.fields -from django.db import migrations, models -import etools.applications.partners.models - - -def migrate_cash_transfer_modalities(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - intervention.cash_transfer_modalities_new = [intervention.cash_transfer_modalities] - intervention.save() - - -def migrate_cash_transfer_modalities_backward(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - intervention.cash_transfer_modalities = intervention.cash_transfer_modalities_new[0] - intervention.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0056_auto_20200824_0917'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='cash_transfer_modalities_new', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('payment', 'Direct Payment'), ('reimbursement', 'Reimbursement'), ('dct', 'Direct Cash Transfer')], max_length=50, verbose_name='Cash Transfer Modalities'), default=etools.applications.partners.models.get_default_cash_transfer_modalities, size=None), - ), - migrations.RunPython(migrate_cash_transfer_modalities, migrate_cash_transfer_modalities_backward), - ] diff --git a/src/etools/applications/partners/migrations/0058_auto_20200902_1119.py b/src/etools/applications/partners/migrations/0058_auto_20200902_1119.py deleted file mode 100644 index 1ee2db2893..0000000000 --- a/src/etools/applications/partners/migrations/0058_auto_20200902_1119.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-02 11:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0057_intervention_cash_transfer_modalities'), - ('partners', '0056_auto_20200820_1524'), - ] - - operations = [ - migrations.RemoveField( - model_name='intervention', - name='cash_transfer_modalities', - ), - migrations.RenameField( - model_name='intervention', - old_name='cash_transfer_modalities_new', - new_name='cash_transfer_modalities', - ) - ] diff --git a/src/etools/applications/partners/migrations/0059_auto_20200903_1443.py b/src/etools/applications/partners/migrations/0059_auto_20200903_1443.py deleted file mode 100644 index 1ba720211c..0000000000 --- a/src/etools/applications/partners/migrations/0059_auto_20200903_1443.py +++ /dev/null @@ -1,81 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-03 14:43 - -from django.db import migrations, models - -DRAFT = 'draft' - - -def migrate_hpd(apps, schema_editor): - Intervention = apps.get_model('partners', 'intervention') - Intervention.objects.filter( - document_type='HPD' - ).update( - document_type='SPD', - humanitarian_flag=True - ) - - -def migrate_ssfa(apps, schema_editor): - Intervention = apps.get_model('partners', 'intervention') - - Intervention.objects.filter( - document_type='SSFA', - status='draft', - ).update( - document_type='SPD', - humanitarian_flag=True, - ) - - Intervention.objects.filter( - document_type='SSFA', - status__in=[ - 'review', - 'signature', - 'signed', - 'active', - 'ended', - 'implemented', - 'suspended', - 'terminated', - ] - ).update( - status='closed' - ) -# In order to avoid skipping active here and checking for extra issues on subsequent migrations -# run the following script on deploy. -# from etools.libraries.tenant_support.utils import run_on_all_tenants as rot -# import datetime -# today = datetime.datetime.now().date() -# def move_ssfas_to_active(): -# print(connection.tenant) -# interventions = Intervention.objects.filter( -# agreement__agreement_type="SSFA", -# start__lte=today, -# end__gte=today, -# status=Intervention.CLOSED) -# print(interventions.values_list("id", flat=True)) -# for i in interventions.all(): -# i.status = i.ACTIVE -# i.save() -# rot(move_ssfas_to_active) - - -def revert_hpd(apps, schema_editor): - Intervention = apps.get_model('partners', 'intervention') - Intervention.objects.filter(document_type='SPD').update(document_type='HPD') - - -class Migration(migrations.Migration): - dependencies = [ - ('partners', '0058_auto_20200902_1119'), - ] - - operations = [ - migrations.RunPython(migrate_hpd, revert_hpd), - migrations.RunPython(migrate_ssfa, migrations.RunPython.noop), - migrations.AlterField( - model_name='intervention', - name='document_type', - field=models.CharField(choices=[('PD', 'Programme Document'), ('SPD', 'Humanitarian Programme Document'), ('SSFA', 'SSFA')], max_length=255, verbose_name='Document Type'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0060_auto_20200908_0839.py b/src/etools/applications/partners/migrations/0060_auto_20200908_0839.py deleted file mode 100644 index c955deb726..0000000000 --- a/src/etools/applications/partners/migrations/0060_auto_20200908_0839.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-08 08:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0059_auto_20200903_1443'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act1_partner', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act1_unicef', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act2_partner', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act2_unicef', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act3_partner', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)'), - ), - migrations.AlterField( - model_name='interventionmanagementbudget', - name='act3_unicef', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF contribution for Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0061_auto_20200914_0758.py b/src/etools/applications/partners/migrations/0061_auto_20200914_0758.py deleted file mode 100644 index 8e896cd3d4..0000000000 --- a/src/etools/applications/partners/migrations/0061_auto_20200914_0758.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-14 07:58 - -from django.db import migrations - - -def create_budgets(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - InterventionBudget = apps.get_model('partners', 'InterventionBudget') - InterventionManagementBudget = apps.get_model('partners', 'InterventionManagementBudget') - - for i in Intervention.objects.all(): - InterventionBudget.objects.get_or_create( - intervention=i, - defaults={ - "total": 0, - "total_local": 0, - } - ) - InterventionManagementBudget.objects.get_or_create(intervention=i) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0060_auto_20200908_0839'), - ] - - operations = [ - migrations.RunPython(create_budgets, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/partners/migrations/0061_auto_20200922_1542.py b/src/etools/applications/partners/migrations/0061_auto_20200922_1542.py deleted file mode 100644 index a249f9c339..0000000000 --- a/src/etools/applications/partners/migrations/0061_auto_20200922_1542.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-22 15:42 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0060_auto_20200908_0839'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionsupplyitem', - name='result', - field=models.ForeignKey(null=True, blank=True, on_delete=django.db.models.deletion.CASCADE, to='partners.InterventionResultLink', verbose_name='Result'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0061_merge_20200918_1557.py b/src/etools/applications/partners/migrations/0061_merge_20200918_1557.py deleted file mode 100644 index e4b0a6535a..0000000000 --- a/src/etools/applications/partners/migrations/0061_merge_20200918_1557.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-18 15:57 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0044_auto_20200914_1428'), - ('partners', '0060_auto_20200908_0839'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0062_auto_20200921_1335.py b/src/etools/applications/partners/migrations/0062_auto_20200921_1335.py deleted file mode 100644 index a8a478c1aa..0000000000 --- a/src/etools/applications/partners/migrations/0062_auto_20200921_1335.py +++ /dev/null @@ -1,63 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-21 13:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0061_merge_20200918_1557'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='capacity_development', - field=models.TextField(blank=True, null=True, verbose_name='Capacity Development'), - ), - migrations.AlterField( - model_name='intervention', - name='context', - field=models.TextField(blank=True, null=True, verbose_name='Context'), - ), - migrations.AlterField( - model_name='intervention', - name='equity_narrative', - field=models.TextField(blank=True, null=True, verbose_name='Equity Narrative'), - ), - migrations.AlterField( - model_name='intervention', - name='gender_narrative', - field=models.TextField(blank=True, null=True, verbose_name='Gender Narrative'), - ), - migrations.AlterField( - model_name='intervention', - name='implementation_strategy', - field=models.TextField(blank=True, null=True, verbose_name='Implementation Strategy'), - ), - migrations.AlterField( - model_name='intervention', - name='ip_program_contribution', - field=models.TextField(blank=True, null=True, verbose_name='Partner Non-Financial Contribution to Programme'), - ), - migrations.AlterField( - model_name='intervention', - name='other_info', - field=models.TextField(blank=True, null=True, verbose_name='Other Info'), - ), - migrations.AlterField( - model_name='intervention', - name='other_partners_involved', - field=models.TextField(blank=True, null=True, verbose_name='Other Partners Involved'), - ), - migrations.AlterField( - model_name='intervention', - name='sustainability_narrative', - field=models.TextField(blank=True, null=True, verbose_name='Sustainability Narrative'), - ), - migrations.AlterField( - model_name='intervention', - name='technical_guidance', - field=models.TextField(blank=True, null=True, verbose_name='Technical Guidance'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0063_merge_20200922_1020.py b/src/etools/applications/partners/migrations/0063_merge_20200922_1020.py deleted file mode 100644 index edcc75bf62..0000000000 --- a/src/etools/applications/partners/migrations/0063_merge_20200922_1020.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-22 10:20 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0061_auto_20200914_0758'), - ('partners', '0062_auto_20200921_1335'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0064_merge_20200923_1719.py b/src/etools/applications/partners/migrations/0064_merge_20200923_1719.py deleted file mode 100644 index d319fd4e97..0000000000 --- a/src/etools/applications/partners/migrations/0064_merge_20200923_1719.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-23 17:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0061_auto_20200922_1542'), - ('partners', '0063_merge_20200922_1020'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0065_auto_20200923_1904.py b/src/etools/applications/partners/migrations/0065_auto_20200923_1904.py deleted file mode 100644 index 5cbc554ffd..0000000000 --- a/src/etools/applications/partners/migrations/0065_auto_20200923_1904.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-23 19:04 - -from django.db import migrations -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0064_merge_20200923_1719'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='status', - field=django_fsm.FSMField(blank=True, choices=[('draft', 'Development'), ('review', 'Review'), ('signature', 'Signature'), ('signed', 'Signed'), ('active', 'Active'), ('cancelled', 'Cancelled'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated')], default='draft', max_length=32, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0065_auto_20200928_1411.py b/src/etools/applications/partners/migrations/0065_auto_20200928_1411.py deleted file mode 100644 index 5d28bfc1ba..0000000000 --- a/src/etools/applications/partners/migrations/0065_auto_20200928_1411.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-28 14:11 - -from django.db import migrations - - -def migrate_cash_transfer_modalities(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - new_value = [] - for i, transfer in enumerate(intervention.cash_transfer_modalities): - transfer_new = { - 'payment': 'payment', - 'reimburse': 'reimbursement', - 'direct': 'dct' - }.get(transfer, None) - if transfer_new: - new_value.append(transfer_new) - - intervention.cash_transfer_modalities = new_value - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0064_merge_20200923_1719'), - ] - - operations = [ - migrations.RunPython(migrate_cash_transfer_modalities, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0066_merge_20200929_1454.py b/src/etools/applications/partners/migrations/0066_merge_20200929_1454.py deleted file mode 100644 index 71efafc2af..0000000000 --- a/src/etools/applications/partners/migrations/0066_merge_20200929_1454.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-29 14:54 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0065_auto_20200928_1411'), - ('partners', '0065_auto_20200923_1904'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0067_auto_20200929_1926.py b/src/etools/applications/partners/migrations/0067_auto_20200929_1926.py deleted file mode 100644 index 076f879916..0000000000 --- a/src/etools/applications/partners/migrations/0067_auto_20200929_1926.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-29 19:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0066_merge_20200929_1454'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='document_type', - field=models.CharField(choices=[('PD', 'Programme Document'), ('SPD', 'Simplified Programme Document')], max_length=255, verbose_name='Document Type'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0067_intervention_date_draft_by_partner.py b/src/etools/applications/partners/migrations/0067_intervention_date_draft_by_partner.py deleted file mode 100644 index 8d1cce0206..0000000000 --- a/src/etools/applications/partners/migrations/0067_intervention_date_draft_by_partner.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-29 19:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0066_merge_20200929_1454'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='date_draft_by_partner', - field=models.DateField(blank=True, null=True, verbose_name='Date first draft by Partner'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0068_merge_20201002_1253.py b/src/etools/applications/partners/migrations/0068_merge_20201002_1253.py deleted file mode 100644 index c391c43c5e..0000000000 --- a/src/etools/applications/partners/migrations/0068_merge_20201002_1253.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-02 12:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0067_intervention_date_draft_by_partner'), - ('partners', '0067_auto_20200929_1926'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0069_intervention_cancel_justification.py b/src/etools/applications/partners/migrations/0069_intervention_cancel_justification.py deleted file mode 100644 index 2572350824..0000000000 --- a/src/etools/applications/partners/migrations/0069_intervention_cancel_justification.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-07 18:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0068_merge_20201002_1253'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='cancel_justification', - field=models.TextField(blank=True, null=True, verbose_name='Cancel Justification'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0069_merge_20201013_1033.py b/src/etools/applications/partners/migrations/0069_merge_20201013_1033.py deleted file mode 100644 index 9b4a025416..0000000000 --- a/src/etools/applications/partners/migrations/0069_merge_20201013_1033.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-13 10:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0068_merge_20201002_1253'), - ('partners', '0046_auto_20200924_1453'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0070_auto_20201014_1519.py b/src/etools/applications/partners/migrations/0070_auto_20201014_1519.py deleted file mode 100644 index 6b433d9e05..0000000000 --- a/src/etools/applications/partners/migrations/0070_auto_20201014_1519.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-14 15:19 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0032_merge_20200923_1719'), - ('partners', '0069_intervention_cancel_justification'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='country_programmes', - field=models.ManyToManyField(blank=True, help_text='Which Country Programme does this Intervention belong to?', related_name='interventions', to='reports.CountryProgramme', verbose_name='Country Programmes'), - ), - migrations.AlterField( - model_name='intervention', - name='country_programme', - field=models.ForeignKey(blank=True, help_text='Which Country Programme does this Intervention belong to?', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='reports.CountryProgramme', verbose_name='Country Programme'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0071_auto_20201014_1521.py b/src/etools/applications/partners/migrations/0071_auto_20201014_1521.py deleted file mode 100644 index e624c15cc5..0000000000 --- a/src/etools/applications/partners/migrations/0071_auto_20201014_1521.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-14 15:21 - -from django.db import migrations - - -def migrate_country_programmes(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - for pd in Intervention.objects.filter( - country_programme__isnull=False, - ).all(): - pd.country_programmes.add(pd.country_programme) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0070_auto_20201014_1519'), - ] - - operations = [ - migrations.RunPython( - migrate_country_programmes, - migrations.RunPython.noop, - ), - ] diff --git a/src/etools/applications/partners/migrations/0072_intervention_date_partnership_review_performed.py b/src/etools/applications/partners/migrations/0072_intervention_date_partnership_review_performed.py deleted file mode 100644 index 1fe0711f6b..0000000000 --- a/src/etools/applications/partners/migrations/0072_intervention_date_partnership_review_performed.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-29 09:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0071_auto_20201014_1521'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='date_partnership_review_performed', - field=models.DateField(blank=True, null=True, verbose_name='Date Final Partnership Review Performed'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0072_merge_20201104_1529.py b/src/etools/applications/partners/migrations/0072_merge_20201104_1529.py deleted file mode 100644 index a98223c925..0000000000 --- a/src/etools/applications/partners/migrations/0072_merge_20201104_1529.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-04 15:29 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0071_auto_20201014_1521'), - ('partners', '0069_merge_20201013_1033'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0072_remove_intervention_date_draft_by_partner.py b/src/etools/applications/partners/migrations/0072_remove_intervention_date_draft_by_partner.py deleted file mode 100644 index cddc543cd5..0000000000 --- a/src/etools/applications/partners/migrations/0072_remove_intervention_date_draft_by_partner.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.7 on 2020-10-29 14:05 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0071_auto_20201014_1521'), - ] - - operations = [ - migrations.RemoveField( - model_name='intervention', - name='date_draft_by_partner', - ), - ] diff --git a/src/etools/applications/partners/migrations/0073_merge_20201111_1602.py b/src/etools/applications/partners/migrations/0073_merge_20201111_1602.py deleted file mode 100644 index a59dc38e80..0000000000 --- a/src/etools/applications/partners/migrations/0073_merge_20201111_1602.py +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-11 16:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0072_remove_intervention_date_draft_by_partner'), - ('partners', '0072_merge_20201104_1529'), - ('partners', '0072_intervention_date_partnership_review_performed'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0073_merge_20201112_0759.py b/src/etools/applications/partners/migrations/0073_merge_20201112_0759.py deleted file mode 100644 index de64aa27ce..0000000000 --- a/src/etools/applications/partners/migrations/0073_merge_20201112_0759.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-12 07:59 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0072_merge_20201104_1529'), - ('partners', '0072_intervention_date_partnership_review_performed'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0074_interventionsupplyitem_unicef_product_number.py b/src/etools/applications/partners/migrations/0074_interventionsupplyitem_unicef_product_number.py deleted file mode 100644 index 78a317c971..0000000000 --- a/src/etools/applications/partners/migrations/0074_interventionsupplyitem_unicef_product_number.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-12 15:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0073_merge_20201112_0759'), - ] - - operations = [ - migrations.AddField( - model_name='interventionsupplyitem', - name='unicef_product_number', - field=models.CharField(blank=True, default='', max_length=150, verbose_name='UNICEF Product Number'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0074_merge_20201113_1516.py b/src/etools/applications/partners/migrations/0074_merge_20201113_1516.py deleted file mode 100644 index 62b19ebf26..0000000000 --- a/src/etools/applications/partners/migrations/0074_merge_20201113_1516.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-13 15:16 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0073_merge_20201112_0759'), - ('partners', '0073_merge_20201111_1602'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0075_merge_20201113_1549.py b/src/etools/applications/partners/migrations/0075_merge_20201113_1549.py deleted file mode 100644 index 6a01039321..0000000000 --- a/src/etools/applications/partners/migrations/0075_merge_20201113_1549.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-11-13 15:49 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0074_interventionsupplyitem_unicef_product_number'), - ('partners', '0074_merge_20201113_1516'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0076_interventionreview.py b/src/etools/applications/partners/migrations/0076_interventionreview.py deleted file mode 100644 index 150eb96d2a..0000000000 --- a/src/etools/applications/partners/migrations/0076_interventionreview.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 2.2.7 on 2020-12-01 21:15 - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0075_merge_20201113_1549'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionReview', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('review_type', models.CharField(choices=[('prc', 'PRC Review'), ('non-prc', 'Non-PRC Review'), ('no-review', 'No Review Required')], default='prc', max_length=50, verbose_name='Types')), - ('overall_approval', models.BooleanField(default=False)), - ('amendment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='partners.InterventionAmendment', verbose_name='Amendment')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'ordering': ['-created'], - }, - ), - ] diff --git a/src/etools/applications/partners/migrations/0076_merge_20210311_1456.py b/src/etools/applications/partners/migrations/0076_merge_20210311_1456.py deleted file mode 100644 index 4f0fdfbef0..0000000000 --- a/src/etools/applications/partners/migrations/0076_merge_20210311_1456.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.11 on 2021-03-11 14:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0047_auto_20210211_1724'), - ('partners', '0075_merge_20201113_1549'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0077_auto_20201201_2119.py b/src/etools/applications/partners/migrations/0077_auto_20201201_2119.py deleted file mode 100644 index 39cea31869..0000000000 --- a/src/etools/applications/partners/migrations/0077_auto_20201201_2119.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2020-12-01 21:19 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0076_interventionreview'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionreview', - name='amendment', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='partners.InterventionAmendment', verbose_name='Amendment'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0078_auto_20201221_1343.py b/src/etools/applications/partners/migrations/0078_auto_20201221_1343.py deleted file mode 100644 index 78617a36cc..0000000000 --- a/src/etools/applications/partners/migrations/0078_auto_20201221_1343.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.7 on 2020-12-21 13:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0077_auto_20201201_2119'), - ] - - operations = [ - migrations.AddField( - model_name='interventionbudget', - name='total_hq_cash_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total HQ Cash Local'), - ), - migrations.AddField( - model_name='interventionbudget', - name='total_unicef_cash_local_wo_hq', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total HQ Cash Local'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0078_auto_20210108_1634.py b/src/etools/applications/partners/migrations/0078_auto_20210108_1634.py deleted file mode 100644 index b8fdd67291..0000000000 --- a/src/etools/applications/partners/migrations/0078_auto_20210108_1634.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-01-08 16:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0077_auto_20201201_2119'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='submission_date', - field=models.DateField(blank=True, help_text='The date the partner submitted complete PD/SPD documents to Unicef', null=True, verbose_name='Document Submission Date by CSO'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0078_merge_20210315_2141.py b/src/etools/applications/partners/migrations/0078_merge_20210315_2141.py deleted file mode 100644 index f17fbf909a..0000000000 --- a/src/etools/applications/partners/migrations/0078_merge_20210315_2141.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.11 on 2021-03-15 21:41 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0076_merge_20210311_1456'), - ('partners', '0077_auto_20201201_2119'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0079_merge_20210331_1520.py b/src/etools/applications/partners/migrations/0079_merge_20210331_1520.py deleted file mode 100644 index 37c26fcee9..0000000000 --- a/src/etools/applications/partners/migrations/0079_merge_20210331_1520.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.19 on 2021-03-31 15:20 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0078_auto_20201221_1343'), - ('partners', '0078_merge_20210315_2141'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0080_auto_20210608_0941.py b/src/etools/applications/partners/migrations/0080_auto_20210608_0941.py deleted file mode 100644 index 7820e41d3c..0000000000 --- a/src/etools/applications/partners/migrations/0080_auto_20210608_0941.py +++ /dev/null @@ -1,78 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-08 09:41 - -from django.conf import settings -import django.contrib.postgres.fields.jsonb -from django.db import migrations, models -import django.db.models.deletion -import etools.applications.partners.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0079_merge_20210331_1520'), - ] - - operations = [ - migrations.AddField( - model_name='interventionamendment', - name='amended_intervention', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='amendment', to='partners.Intervention', verbose_name='Amended Intervention'), - ), - migrations.AddField( - model_name='interventionamendment', - name='difference', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AddField( - model_name='interventionamendment', - name='is_active', - field=models.BooleanField(default=True), - ), - migrations.AddField( - model_name='interventionamendment', - name='kind', - field=models.CharField(choices=[('normal', 'Normal'), ('contingency', 'Contingency')], default='normal', max_length=20, verbose_name='Kind'), - ), - migrations.AddField( - model_name='interventionamendment', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.PartnerStaffMember', verbose_name='Signed by Partner'), - ), - migrations.AddField( - model_name='interventionamendment', - name='related_objects_map', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AddField( - model_name='interventionamendment', - name='signed_by_partner_date', - field=models.DateField(blank=True, null=True, verbose_name='Signed by Partner Date'), - ), - migrations.AddField( - model_name='interventionamendment', - name='signed_by_unicef_date', - field=models.DateField(blank=True, null=True, verbose_name='Signed by UNICEF Date'), - ), - migrations.AddField( - model_name='interventionamendment', - name='unicef_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='++', to=settings.AUTH_USER_MODEL, verbose_name='Signed by UNICEF'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='amendment_number', - field=models.CharField(max_length=15, verbose_name='Number'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='signed_amendment', - field=models.FileField(blank=True, max_length=1024, upload_to=etools.applications.partners.models.get_intervention_amendment_file_path, verbose_name='Amendment Document'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='signed_date', - field=models.DateField(blank=True, null=True, verbose_name='Signed Date'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0080_merge_20210507_1443.py b/src/etools/applications/partners/migrations/0080_merge_20210507_1443.py deleted file mode 100644 index 61daaedad2..0000000000 --- a/src/etools/applications/partners/migrations/0080_merge_20210507_1443.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-07 14:43 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0048_auto_20210506_0803'), - ('partners', '0079_merge_20210331_1520'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0081_auto_20210517_1039.py b/src/etools/applications/partners/migrations/0081_auto_20210517_1039.py deleted file mode 100644 index e6c05268a1..0000000000 --- a/src/etools/applications/partners/migrations/0081_auto_20210517_1039.py +++ /dev/null @@ -1,151 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-17 10:39 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0080_merge_20210507_1443'), - ] - - operations = [ - migrations.AddField( - model_name='interventionreview', - name='actions_list', - field=models.TextField(blank=True, verbose_name='Actions List'), - ), - migrations.AddField( - model_name='interventionreview', - name='budget_is_aligned', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The budget of the proposed PD/SPD is aligned with the principles of value for money with the effective and efficient programme management costs adhering to office defined limits'), - ), - migrations.AddField( - model_name='interventionreview', - name='ges_considered', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Gender, equity and sustainability have been considered in the programme design process'), - ), - migrations.AddField( - model_name='interventionreview', - name='meeting_date', - field=models.DateField(blank=True, null=True, verbose_name='Meeting Date'), - ), - migrations.AddField( - model_name='interventionreview', - name='overall_approver', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Overall Approver'), - ), - migrations.AddField( - model_name='interventionreview', - name='overall_comment', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='interventionreview', - name='partner_comparative_advantage', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The partner selection evidences the CSO’s comparative advantage and value for money in relation to the planned results'), - ), - migrations.AddField( - model_name='interventionreview', - name='pd_is_guided', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The results framework of the proposed PD/SPD has been guided by M&E feedback during the drafting process'), - ), - migrations.AddField( - model_name='interventionreview', - name='pd_is_relevant', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The proposed PD/SPD is relevant to achieving results in the country programme document, the relevant sector workplan and or humanitarian response plan'), - ), - migrations.AddField( - model_name='interventionreview', - name='prc_officers', - field=models.ManyToManyField(blank=True, related_name='_interventionreview_prc_officers_+', to=settings.AUTH_USER_MODEL, verbose_name='PRC Officers'), - ), - migrations.AddField( - model_name='interventionreview', - name='relationship_is_represented', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=10, verbose_name='The proposed relationship is best represented and regulated by partnership (as opposed to procurement), with both UNICEF and the CSO making clear contributions to the PD/SPD'), - ), - migrations.AddField( - model_name='interventionreview', - name='relationships_are_positive', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Previous UNICEF/UN relationships with the proposed CSO have been positive'), - ), - migrations.AddField( - model_name='interventionreview', - name='started_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Started By'), - ), - migrations.AddField( - model_name='interventionreview', - name='started_date', - field=models.DateField(blank=True, null=True, verbose_name='Date Review Started'), - ), - migrations.AddField( - model_name='interventionreview', - name='submitted_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Submitted By'), - ), - migrations.AddField( - model_name='interventionreview', - name='submitted_date', - field=models.DateField(blank=True, null=True, verbose_name='Submitted Date'), - ), - migrations.AddField( - model_name='interventionreview', - name='supply_issues_considered', - field=models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The relevant supply issues have been duly considered'), - ), - migrations.AlterField( - model_name='interventionreview', - name='overall_approval', - field=models.BooleanField(null=True, blank=True), - ), - migrations.AlterField( - model_name='interventionreview', - name='review_type', - field=models.CharField(blank=True, choices=[('prc', 'PRC Review'), ('non-prc', 'Non-PRC Review'), ('no-review', 'No Review Required')], max_length=50, verbose_name='Types'), - ), - migrations.CreateModel( - name='PRCOfficerInterventionReview', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('relationship_is_represented', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=10, verbose_name='The proposed relationship is best represented and regulated by partnership (as opposed to procurement), with both UNICEF and the CSO making clear contributions to the PD/SPD')), - ('partner_comparative_advantage', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The partner selection evidences the CSO’s comparative advantage and value for money in relation to the planned results')), - ('relationships_are_positive', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Previous UNICEF/UN relationships with the proposed CSO have been positive')), - ('pd_is_relevant', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The proposed PD/SPD is relevant to achieving results in the country programme document, the relevant sector workplan and or humanitarian response plan')), - ('pd_is_guided', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The results framework of the proposed PD/SPD has been guided by M&E feedback during the drafting process')), - ('ges_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='Gender, equity and sustainability have been considered in the programme design process')), - ('budget_is_aligned', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The budget of the proposed PD/SPD is aligned with the principles of value for money with the effective and efficient programme management costs adhering to office defined limits')), - ('supply_issues_considered', models.CharField(blank=True, choices=[('', 'Not decided yet'), ('a', 'Yes, strongly agree'), ('b', 'Yes, agree'), ('c', 'No, disagree'), ('d', 'No, strongly disagree')], max_length=100, verbose_name='The relevant supply issues have been duly considered')), - ('overall_comment', models.TextField(blank=True)), - ('overall_approval', models.BooleanField(null=True, blank=True)), - ('started_date', models.DateField(blank=True, null=True, verbose_name='Date Review Started')), - ('submitted_date', models.DateField(blank=True, null=True, verbose_name='Date Review Submitted')), - ('overall_review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_reviews', to='partners.InterventionReview')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_reviews', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - options={ - 'ordering': ['-created'], - }, - ), - migrations.CreateModel( - name='InterventionReviewNotification', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_notifications', to='partners.InterventionReview')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prc_notifications', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - options={ - 'ordering': ('review', '-created'), - }, - ), - ] diff --git a/src/etools/applications/partners/migrations/0081_auto_20210521_0929.py b/src/etools/applications/partners/migrations/0081_auto_20210521_0929.py deleted file mode 100644 index fdf07ccbcc..0000000000 --- a/src/etools/applications/partners/migrations/0081_auto_20210521_0929.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-21 09:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0080_merge_20210507_1443'), - ] - - operations = [ - migrations.AddField( - model_name='interventionbudget', - name='partner_supply_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Partner Supplies Local'), - ), - migrations.AddField( - model_name='interventionbudget', - name='total_partner_contribution_local', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Total Partner Contribution'), - ), - migrations.AddField( - model_name='interventionsupplyitem', - name='provided_by', - field=models.CharField(choices=[('unicef', 'UNICEF'), ('partner', 'Partner')], default='unicef', max_length=10, verbose_name='Provided By'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0082_auto_20210601_1302.py b/src/etools/applications/partners/migrations/0082_auto_20210601_1302.py deleted file mode 100644 index 0d26677d2f..0000000000 --- a/src/etools/applications/partners/migrations/0082_auto_20210601_1302.py +++ /dev/null @@ -1,55 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-01 13:02 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0081_auto_20210517_1039'), - ] - - operations = [ - migrations.RemoveField( - model_name='interventionreview', - name='started_by', - ), - migrations.RemoveField( - model_name='interventionreview', - name='started_date', - ), - migrations.RemoveField( - model_name='interventionreview', - name='submitted_by', - ), - migrations.RemoveField( - model_name='interventionreview', - name='submitted_date', - ), - migrations.RemoveField( - model_name='prcofficerinterventionreview', - name='started_date', - ), - migrations.RemoveField( - model_name='prcofficerinterventionreview', - name='submitted_date', - ), - migrations.AddField( - model_name='interventionreview', - name='created_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='PRC Submitted By'), - ), - migrations.AddField( - model_name='interventionreview', - name='review_date', - field=models.DateField(blank=True, null=True, verbose_name='Review Date'), - ), - migrations.AddField( - model_name='prcofficerinterventionreview', - name='review_date', - field=models.DateField(blank=True, null=True, verbose_name='Review Date'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0083_auto_20210607_1956.py b/src/etools/applications/partners/migrations/0083_auto_20210607_1956.py deleted file mode 100644 index a22cb45482..0000000000 --- a/src/etools/applications/partners/migrations/0083_auto_20210607_1956.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-07 19:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0082_auto_20210601_1302'), - ] - - operations = [ - migrations.RenameField( - model_name='interventionreview', - old_name='created_by', - new_name='submitted_by', - ), - ] diff --git a/src/etools/applications/partners/migrations/0084_merge_20210608_0948.py b/src/etools/applications/partners/migrations/0084_merge_20210608_0948.py deleted file mode 100644 index 13e2152fb6..0000000000 --- a/src/etools/applications/partners/migrations/0084_merge_20210608_0948.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-08 09:48 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0083_auto_20210607_1956'), - ('partners', '0080_auto_20210608_0941'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0084_merge_20210608_0951.py b/src/etools/applications/partners/migrations/0084_merge_20210608_0951.py deleted file mode 100644 index 6ffa0c4b4a..0000000000 --- a/src/etools/applications/partners/migrations/0084_merge_20210608_0951.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-08 09:51 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0083_auto_20210607_1956'), - ('partners', '0081_auto_20210521_0929'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0085_merge_20210609_1507.py b/src/etools/applications/partners/migrations/0085_merge_20210609_1507.py deleted file mode 100644 index 21ecbb79ed..0000000000 --- a/src/etools/applications/partners/migrations/0085_merge_20210609_1507.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-09 15:07 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0084_merge_20210608_0948'), - ('partners', '0084_merge_20210608_0951'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0086_intervention_accepted_on_behalf_of_partner.py b/src/etools/applications/partners/migrations/0086_intervention_accepted_on_behalf_of_partner.py deleted file mode 100644 index 4ebdce4c49..0000000000 --- a/src/etools/applications/partners/migrations/0086_intervention_accepted_on_behalf_of_partner.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.20 on 2021-06-17 15:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0085_merge_20210609_1507'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='accepted_on_behalf_of_partner', - field=models.BooleanField(default=False, verbose_name='Accepted on behalf of Partner'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0087_interventionmanagementbudgetitem.py b/src/etools/applications/partners/migrations/0087_interventionmanagementbudgetitem.py deleted file mode 100644 index fa39e76ed6..0000000000 --- a/src/etools/applications/partners/migrations/0087_interventionmanagementbudgetitem.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.2.20 on 2021-07-08 09:16 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0086_intervention_accepted_on_behalf_of_partner'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionManagementBudgetItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='Name')), - ('kind', models.CharField(choices=[('in_country', 'In-country management and support staff prorated to their contribution to the programme (representation, planning, coordination, logistics, administration, finance)'), ('operational', 'Operational costs prorated to their contribution to the programme (office space, equipment, office supplies, maintenance)'), ('planning', 'Planning, monitoring, evaluation and communication, prorated to their contribution to the programme (venue, travels, etc.)')], max_length=15, verbose_name='Kind')), - ('unicef_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash Local')), - ('cso_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash Local')), - ('budget', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='partners.InterventionManagementBudget', verbose_name='Budget')), - ], - ), - ] diff --git a/src/etools/applications/partners/migrations/0088_auto_20210712_1447.py b/src/etools/applications/partners/migrations/0088_auto_20210712_1447.py deleted file mode 100644 index 92bccb4d0f..0000000000 --- a/src/etools/applications/partners/migrations/0088_auto_20210712_1447.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 2.2.20 on 2021-07-12 14:47 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0087_interventionmanagementbudgetitem'), - ] - - operations = [ - migrations.AddField( - model_name='interventionmanagementbudgetitem', - name='no_units', - field=models.DecimalField(decimal_places=1, default=1, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number'), - preserve_default=False, - ), - migrations.AddField( - model_name='interventionmanagementbudgetitem', - name='unit', - field=models.CharField(default='unknown', max_length=150, verbose_name='Unit'), - preserve_default=False, - ), - migrations.AddField( - model_name='interventionmanagementbudgetitem', - name='unit_price', - field=models.DecimalField(decimal_places=2, default=1, max_digits=20, verbose_name='Unit Price'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/partners/migrations/0089_merge_0078_auto_20210108_1634_0088_auto_20210712_1447.py b/src/etools/applications/partners/migrations/0089_merge_0078_auto_20210108_1634_0088_auto_20210712_1447.py deleted file mode 100644 index a0297e168d..0000000000 --- a/src/etools/applications/partners/migrations/0089_merge_0078_auto_20210108_1634_0088_auto_20210712_1447.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-13 14:28 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0078_auto_20210108_1634'), - ('partners', '0088_auto_20210712_1447'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0090_alter_intervention_status.py b/src/etools/applications/partners/migrations/0090_alter_intervention_status.py deleted file mode 100644 index a4a2a22b88..0000000000 --- a/src/etools/applications/partners/migrations/0090_alter_intervention_status.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-25 08:05 - -from django.db import migrations -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0089_merge_0078_auto_20210108_1634_0088_auto_20210712_1447'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='status', - field=django_fsm.FSMField(blank=True, choices=[('draft', 'Development'), ('review', 'Review'), ('signature', 'Signature'), ('signed', 'Signed'), ('active', 'Active'), ('cancelled', 'Cancelled'), ('ended', 'Ended'), ('closed', 'Closed'), ('suspended', 'Suspended'), ('terminated', 'Terminated'), ('expired', 'Expired')], default='draft', max_length=32, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0091_intervention_sites.py b/src/etools/applications/partners/migrations/0091_intervention_sites.py deleted file mode 100644 index 5c5e251a21..0000000000 --- a/src/etools/applications/partners/migrations/0091_intervention_sites.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2021-09-18 19:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0008_auto_20210108_1634'), - ('partners', '0090_alter_intervention_status'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='sites', - field=models.ManyToManyField(blank=True, related_name='interventions', to='field_monitoring_settings.LocationSite', verbose_name='Sites'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0092_intervention_activation_protocol.py b/src/etools/applications/partners/migrations/0092_intervention_activation_protocol.py deleted file mode 100644 index 889eca3b23..0000000000 --- a/src/etools/applications/partners/migrations/0092_intervention_activation_protocol.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2021-09-21 08:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0091_intervention_sites'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='activation_protocol', - field=models.TextField(blank=True, null=True, verbose_name='Activation Protocol'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0093_merge_20211109_2053.py b/src/etools/applications/partners/migrations/0093_merge_20211109_2053.py deleted file mode 100644 index 2fae4e58d2..0000000000 --- a/src/etools/applications/partners/migrations/0093_merge_20211109_2053.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2021-11-09 20:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0049_alter_interventionresultlink_unique_together'), - ('partners', '0092_intervention_activation_protocol'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0094_interventionresultlink_code.py b/src/etools/applications/partners/migrations/0094_interventionresultlink_code.py deleted file mode 100644 index 2ea43a2ee6..0000000000 --- a/src/etools/applications/partners/migrations/0094_interventionresultlink_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-21 12:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0093_merge_20211109_2053'), - ] - - operations = [ - migrations.AddField( - model_name='interventionresultlink', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0094_interventionreview_sent_back_comment.py b/src/etools/applications/partners/migrations/0094_interventionreview_sent_back_comment.py deleted file mode 100644 index 6e7804975e..0000000000 --- a/src/etools/applications/partners/migrations/0094_interventionreview_sent_back_comment.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-02 14:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0093_merge_20211109_2053'), - ] - - operations = [ - migrations.AddField( - model_name='interventionreview', - name='sent_back_comment', - field=models.TextField(blank=True, verbose_name='Sent Back by Secretary Comment'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0095_auto_20220222_1132.py b/src/etools/applications/partners/migrations/0095_auto_20220222_1132.py deleted file mode 100644 index 255a31a437..0000000000 --- a/src/etools/applications/partners/migrations/0095_auto_20220222_1132.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-22 11:32 - -from django.db import migrations - - -def number_result_links(apps, schema_editor): - InterventionResultLink = apps.get_model('partners', 'InterventionResultLink') - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - result_links = intervention.result_links.all() - for i, result_link in enumerate(result_links): - result_link.code = str(i + 1) - InterventionResultLink.objects.bulk_update(result_links, fields=['code']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0094_interventionresultlink_code'), - ] - - operations = [ - migrations.RunPython(number_result_links, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0096_merge_20220325_0818.py b/src/etools/applications/partners/migrations/0096_merge_20220325_0818.py deleted file mode 100644 index 020e6f58ab..0000000000 --- a/src/etools/applications/partners/migrations/0096_merge_20220325_0818.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-03-25 08:18 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0094_interventionreview_sent_back_comment'), - ('partners', '0095_auto_20220222_1132'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0097_intervention_confidential.py b/src/etools/applications/partners/migrations/0097_intervention_confidential.py deleted file mode 100644 index cc9d78b181..0000000000 --- a/src/etools/applications/partners/migrations/0097_intervention_confidential.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-08 08:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0096_merge_20220325_0818'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='confidential', - field=models.TextField(blank=True, null=True, verbose_name='Confidential'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0098_auto_20220426_1123.py b/src/etools/applications/partners/migrations/0098_auto_20220426_1123.py deleted file mode 100644 index ee20e343f5..0000000000 --- a/src/etools/applications/partners/migrations/0098_auto_20220426_1123.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-26 11:23 - -from django.db import migrations -from django.db.models import Q - - -def migrate_cash_transfer_choices(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - interventions_to_migrate = Intervention.objects.filter( - Q(cash_transfer_modalities__contains=['reimburse']) | - Q(cash_transfer_modalities__contains=['direct']) - ) - choices_mapping = { - 'reimburse': 'reimbursement', - 'direct': 'dct', - } - for intervention in interventions_to_migrate: - intervention.cash_transfer_modalities = [choices_mapping.get(ct, ct) for ct in intervention.cash_transfer_modalities] - intervention.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0097_intervention_confidential'), - ] - - operations = [ - migrations.RunPython(migrate_cash_transfer_choices, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0099_auto_20220426_1131.py b/src/etools/applications/partners/migrations/0099_auto_20220426_1131.py deleted file mode 100644 index 196aa8f472..0000000000 --- a/src/etools/applications/partners/migrations/0099_auto_20220426_1131.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-26 11:31 - -from django.db import migrations - - -def deactivate_v1_amendments(apps, schema_editor): - InterventionAmendment = apps.get_model('partners', 'InterventionAmendment') - for amendment in InterventionAmendment.objects.filter(amended_intervention__isnull=True): - amendment.signed_by_unicef_date = amendment.signed_date - amendment.signed_by_partner_date = amendment.signed_date - amendment.is_active = False - amendment.save() - - intervention = amendment.intervention - if intervention.in_amendment: - intervention.in_amendment = False - intervention.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0098_auto_20220426_1123'), - ] - - operations = [ - migrations.RunPython(deactivate_v1_amendments, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0100_alter_intervention_confidential.py b/src/etools/applications/partners/migrations/0100_alter_intervention_confidential.py deleted file mode 100644 index 48315faff4..0000000000 --- a/src/etools/applications/partners/migrations/0100_alter_intervention_confidential.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-29 03:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0099_auto_20220426_1131'), - ] - - operations = [ - migrations.RemoveField( - model_name='intervention', - name='confidential', - ), - migrations.AddField( - model_name='intervention', - name='confidential', - field=models.BooleanField(default=False, verbose_name='Confidential'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0101_alter_interventionmanagementbudgetitem_no_units.py b/src/etools/applications/partners/migrations/0101_alter_interventionmanagementbudgetitem_no_units.py deleted file mode 100644 index eecf8798e6..0000000000 --- a/src/etools/applications/partners/migrations/0101_alter_interventionmanagementbudgetitem_no_units.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-06 03:20 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0100_alter_intervention_confidential'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionmanagementbudgetitem', - name='no_units', - field=models.DecimalField(decimal_places=2, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0101_alter_interventionresultlink_options.py b/src/etools/applications/partners/migrations/0101_alter_interventionresultlink_options.py deleted file mode 100644 index 4f702cbbd6..0000000000 --- a/src/etools/applications/partners/migrations/0101_alter_interventionresultlink_options.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-06 05:13 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0100_alter_intervention_confidential'), - ] - - operations = [ - migrations.AlterModelOptions( - name='interventionresultlink', - options={'ordering': ['created']}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0102_auto_20220510_0711.py b/src/etools/applications/partners/migrations/0102_auto_20220510_0711.py deleted file mode 100644 index 83684ac77a..0000000000 --- a/src/etools/applications/partners/migrations/0102_auto_20220510_0711.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-10 07:11 - -from django.db import migrations - - -def migrate_multiple_temp_result_links_to_one(apps, schema_editor): - InterventionResultLink = apps.get_model('partners', 'InterventionResultLink') - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - temp_links = list(intervention.result_links.filter(cp_output=None)) - first_temp_link = None - if len(temp_links) > 1: - first_temp_link = temp_links[0] - for link in temp_links[1:]: - link.ll_results.update(result_link=first_temp_link) - link.delete() - - if first_temp_link: - first_temp_link.code = '0' - first_temp_link.save() - - result_links = intervention.result_links.exclude(cp_output=None) - for i, result_link in enumerate(result_links): - result_link.code = str(i + 1) - InterventionResultLink.objects.bulk_update(result_links, fields=['code']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0101_alter_interventionresultlink_options'), - ] - - operations = [ - migrations.RunPython(migrate_multiple_temp_result_links_to_one, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0103_merge_20220510_0742.py b/src/etools/applications/partners/migrations/0103_merge_20220510_0742.py deleted file mode 100644 index b03d835574..0000000000 --- a/src/etools/applications/partners/migrations/0103_merge_20220510_0742.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-10 07:42 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0101_alter_interventionmanagementbudgetitem_no_units'), - ('partners', '0102_auto_20220510_0711'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0104_auto_20220808_0931.py b/src/etools/applications/partners/migrations/0104_auto_20220808_0931.py deleted file mode 100644 index abdc14f9ca..0000000000 --- a/src/etools/applications/partners/migrations/0104_auto_20220808_0931.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-08 09:31 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0103_merge_20220510_0742'), - ] - - operations = [ - migrations.AlterModelOptions( - name='interventionmanagementbudgetitem', - options={'ordering': ('id',)}, - ), - migrations.AlterModelOptions( - name='interventionsupplyitem', - options={'ordering': ('id',)}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0105_agreement_terms_acknowledged_by.py b/src/etools/applications/partners/migrations/0105_agreement_terms_acknowledged_by.py deleted file mode 100644 index dcdf64bb70..0000000000 --- a/src/etools/applications/partners/migrations/0105_agreement_terms_acknowledged_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-24 06:07 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0104_auto_20220808_0931'), - ] - - operations = [ - migrations.AddField( - model_name='agreement', - name='terms_acknowledged_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_acknowledged+', to=settings.AUTH_USER_MODEL, verbose_name='Terms Acknowledged By'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0105_auto_20221116_0757.py b/src/etools/applications/partners/migrations/0105_auto_20221116_0757.py deleted file mode 100644 index 709b330399..0000000000 --- a/src/etools/applications/partners/migrations/0105_auto_20221116_0757.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-16 07:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0104_auto_20220808_0931'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='has_activities_involving_children', - field=models.BooleanField(default=False, verbose_name='Activities involving children and young people'), - ), - migrations.AddField( - model_name='intervention', - name='has_data_processing_agreement', - field=models.BooleanField(default=False, verbose_name='Data Processing Agreement'), - ), - migrations.AddField( - model_name='intervention', - name='has_special_conditions_for_construction', - field=models.BooleanField(default=False, verbose_name='Special Conditions for Construction Works by Implementing Partners'), - ), - migrations.AlterField( - model_name='filetype', - name='name', - field=models.CharField(choices=[('FACE', 'FACE'), ('Progress Report', 'Progress Report'), ('Final Partnership Review', 'Final Partnership Review'), ('Correspondence', 'Correspondence'), ('Supply/Distribution Plan', 'Supply/Distribution Plan'), ('Data Processing Agreement', 'Data Processing Agreement'), ('Activities involving children and young people', 'Activities involving children and young people'), ('Special Conditions for Construction Works', 'Special Conditions for Construction Works'), ('Other', 'Other')], max_length=64, unique=True, verbose_name='Name'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0106_merge_20221206_1550.py b/src/etools/applications/partners/migrations/0106_merge_20221206_1550.py deleted file mode 100644 index af5da9c6b1..0000000000 --- a/src/etools/applications/partners/migrations/0106_merge_20221206_1550.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-06 15:50 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0105_agreement_terms_acknowledged_by'), - ('partners', '0105_auto_20221116_0757'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0107_auto_20221208_0902.py b/src/etools/applications/partners/migrations/0107_auto_20221208_0902.py deleted file mode 100644 index a4148a7e9d..0000000000 --- a/src/etools/applications/partners/migrations/0107_auto_20221208_0902.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-08 09:02 - -from django.db import migrations, models - - -def migrate_fpr_file_type(apps, schema_editor): - FileType = apps.get_model('partners', 'FileType') - FileType.objects.filter(name='Final Partnership Review').update(name='(Legacy) Final Partnership Review') - - -def migrate_fpr_file_type_backwards(apps, schema_editor): - FileType = apps.get_model('partners', 'FileType') - FileType.objects.filter(name='(Legacy) Final Partnership Review').update(name='Final Partnership Review') - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0106_merge_20221206_1550'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='final_review_approved', - field=models.BooleanField(default=False, verbose_name='Final Review Approved'), - ), - migrations.AlterField( - model_name='filetype', - name='name', - field=models.CharField(choices=[('FACE', 'FACE'), ('Progress Report', 'Progress Report'), ('(Legacy) Final Partnership Review', '(Legacy) Final Partnership Review'), ('Correspondence', 'Correspondence'), ('Supply/Distribution Plan', 'Supply/Distribution Plan'), ('Data Processing Agreement', 'Data Processing Agreement'), ('Activities involving children and young people', 'Activities involving children and young people'), ('Special Conditions for Construction Works', 'Special Conditions for Construction Works'), ('Other', 'Other')], max_length=64, unique=True, verbose_name='Name'), - ), - migrations.RunPython(migrate_fpr_file_type, migrate_fpr_file_type_backwards), - ] diff --git a/src/etools/applications/partners/migrations/0108_auto_20221213_1223.py b/src/etools/applications/partners/migrations/0108_auto_20221213_1223.py deleted file mode 100644 index a50d023d3a..0000000000 --- a/src/etools/applications/partners/migrations/0108_auto_20221213_1223.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-13 12:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0107_auto_20221208_0902'), - ] - - operations = [ - migrations.AlterField( - model_name='directcashtransfer', - name='amount_less_than_3_Months_usd', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Amount less than 3 months (USD)'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0109_merge_0050_auto_20221121_1526_0108_auto_20221213_1223.py b/src/etools/applications/partners/migrations/0109_merge_0050_auto_20221121_1526_0108_auto_20221213_1223.py deleted file mode 100644 index 7270cb8b31..0000000000 --- a/src/etools/applications/partners/migrations/0109_merge_0050_auto_20221121_1526_0108_auto_20221213_1223.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-14 19:04 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0050_auto_20221121_1526'), - ('partners', '0108_auto_20221213_1223'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0110_intervention_other_details.py b/src/etools/applications/partners/migrations/0110_intervention_other_details.py deleted file mode 100644 index d976801b17..0000000000 --- a/src/etools/applications/partners/migrations/0110_intervention_other_details.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2023-02-13 05:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0109_merge_0050_auto_20221121_1526_0108_auto_20221213_1223'), - ] - - operations = [ - migrations.AddField( - model_name='intervention', - name='other_details', - field=models.TextField(blank=True, null=True, verbose_name='Other Document Details'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0111_auto_20230315_0932.py b/src/etools/applications/partners/migrations/0111_auto_20230315_0932.py deleted file mode 100644 index b687bef24d..0000000000 --- a/src/etools/applications/partners/migrations/0111_auto_20230315_0932.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.6 on 2023-03-15 09:32 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_settings', '0009_merge_0008_alter_option_label_0008_auto_20210108_1634'), - ('partners', '0110_intervention_other_details'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionPlannedVisitSite', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('quarter', models.PositiveSmallIntegerField(choices=[(1, 'Q1'), (2, 'Q2'), (3, 'Q3'), (4, 'Q4')])), - ('planned_visits', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='partners.interventionplannedvisits')), - ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='field_monitoring_settings.locationsite')), - ], - ), - migrations.AddField( - model_name='interventionplannedvisits', - name='sites', - field=models.ManyToManyField(blank=True, through='partners.InterventionPlannedVisitSite', to='field_monitoring_settings.LocationSite', verbose_name='Sites'), - ), - migrations.AlterUniqueTogether( - name='interventionplannedvisitsite', - unique_together={('planned_visits', 'site', 'quarter')}, - ), - ] diff --git a/src/etools/applications/partners/migrations/0112_auto_20230418_1346.py b/src/etools/applications/partners/migrations/0112_auto_20230418_1346.py deleted file mode 100644 index 1e7fc5ce43..0000000000 --- a/src/etools/applications/partners/migrations/0112_auto_20230418_1346.py +++ /dev/null @@ -1,47 +0,0 @@ -# Generated by Django 3.2.6 on 2023-04-18 13:46 -import json - -from django.db import migrations -from django.utils import timezone - - -def update_audits_completed(apps, schema_editor): - PartnerOrganization = apps.get_model('partners', 'PartnerOrganization') - Audit = apps.get_model('audit', 'Audit') - SpecialAudit = apps.get_model('audit', 'SpecialAudit') - - for partner in PartnerOrganization.objects.all(): - if isinstance(partner.hact_values, str): - partner.hact_values = json.loads(partner.hact_values) - - if 'audits' not in partner.hact_values: - continue - - if 'completed' not in partner.hact_values['audits']: - continue - - audits = Audit.objects.filter( - partner=partner, - year_of_audit=timezone.now().year - ).exclude(status='cancelled') - - s_audits = SpecialAudit.objects.filter( - partner=partner, - year_of_audit=timezone.now().year - ).exclude(status='cancelled') - - completed_audit = audits.count() + s_audits.count() - partner.hact_values['audits']['completed'] = completed_audit - partner.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0111_auto_20230315_0932'), - ('audit', '0024_audit_year_of_audit'), - ] - - operations = [ - migrations.RunPython(update_audits_completed, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0113_alter_intervention_title.py b/src/etools/applications/partners/migrations/0113_alter_intervention_title.py deleted file mode 100644 index db842dcb71..0000000000 --- a/src/etools/applications/partners/migrations/0113_alter_intervention_title.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2023-05-02 14:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0112_auto_20230418_1346'), - ] - - operations = [ - migrations.AlterField( - model_name='intervention', - name='title', - field=models.CharField(max_length=306, verbose_name='Document Title'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0113_partnerorganization_organization.py b/src/etools/applications/partners/migrations/0113_partnerorganization_organization.py deleted file mode 100644 index 87eca3da50..0000000000 --- a/src/etools/applications/partners/migrations/0113_partnerorganization_organization.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated by Django 3.2.6 on 2022-07-13 12:55 -import logging - -from django.db import migrations, models, transaction -import django.db.models.deletion - - -def migrate_organizations(apps, schema_editor): - Organization = apps.get_model('organizations', 'Organization') - PartnerOrganization = apps.get_model('partners', 'PartnerOrganization') - - with transaction.atomic(): - for partner_org in PartnerOrganization.objects.all(): - # this should not be the case as Partners should all be sanitized - if not partner_org.vendor_number: - logging.info(f"No vendor_number set for Partner " - f"{partner_org.name} id: {partner_org.pk}. Skipping..") - continue - # update if it already exists as the organization might have been created from - # AuditorFirms/TPMPartners which don't have an organization_type, cso_type or short_name - organization, created = Organization.objects.update_or_create( - vendor_number=partner_org.vendor_number, - defaults={ - 'name': partner_org.name, - 'organization_type': partner_org.partner_type, - 'cso_type': partner_org.cso_type, - 'short_name': partner_org.short_name, - }) - if not created: - logging.info(f'Organization {organization.name} with ' - f'vendor_number {organization.vendor_number} was updated.') - partner_org.organization = organization - partner_org.save(update_fields=['organization']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('partners', '0112_auto_20230418_1346'), - ] - - operations = [ - migrations.AlterModelOptions( - name='partnerorganization', - options={'base_manager_name': 'objects'}, - ), - migrations.AlterUniqueTogether( - name='partnerorganization', - unique_together=set(), - ), - migrations.AddField( - model_name='partnerorganization', - name='organization', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='partner', to='organizations.organization'), - ), - migrations.RunPython(migrate_organizations, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0114_remove_partner_org_fields.py b/src/etools/applications/partners/migrations/0114_remove_partner_org_fields.py deleted file mode 100644 index 8d803d45a9..0000000000 --- a/src/etools/applications/partners/migrations/0114_remove_partner_org_fields.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.6 on 2022-07-14 10:11 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0113_partnerorganization_organization'), - ] - - operations = [ - migrations.RemoveField( - model_name='partnerorganization', - name='cso_type', - ), - migrations.RemoveField( - model_name='partnerorganization', - name='name', - ), - migrations.RemoveField( - model_name='partnerorganization', - name='partner_type', - ), - migrations.RemoveField( - model_name='partnerorganization', - name='short_name', - ), - migrations.RemoveField( - model_name='partnerorganization', - name='vendor_number', - ), - ] diff --git a/src/etools/applications/partners/migrations/0115_alter_partnerorganization_organization.py b/src/etools/applications/partners/migrations/0115_alter_partnerorganization_organization.py deleted file mode 100644 index bef3f742d8..0000000000 --- a/src/etools/applications/partners/migrations/0115_alter_partnerorganization_organization.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-10-13 12:41 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('partners', '0114_remove_partner_org_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='partnerorganization', - name='organization', - field=models.OneToOneField(default=4, on_delete=django.db.models.deletion.CASCADE, related_name='partner', to='organizations.organization'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/partners/migrations/0116_realms_partnerstaffmembers.py b/src/etools/applications/partners/migrations/0116_realms_partnerstaffmembers.py deleted file mode 100644 index 49172bae49..0000000000 --- a/src/etools/applications/partners/migrations/0116_realms_partnerstaffmembers.py +++ /dev/null @@ -1,85 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-28 12:18 -import logging -from django.db import migrations, connection - - -def migrate_partnerstaffmembers(apps, schema_editor): - if connection.tenant.schema_name in ['public', 'test']: - return - - PartnerStaffMember = apps.get_model('partners', 'PartnerStaffMember') - Country = apps.get_model('users', 'Country') - Group = apps.get_model('auth', 'Group') - Realm = apps.get_model('users', 'Realm') - Organization = apps.get_model('organizations', 'Organization') - ip_viewer_group, _ = Group.objects.get_or_create(name="IP Viewer") - - country = Country.objects.get(schema_name=connection.tenant.schema_name) - realm_list = [] - - external_psea_org, _ = Organization.objects.get_or_create( - name='EXTERNAL PSEA ASSESSORS', - vendor_number='EXTERNAL PSEA ASSESSORS', - ) - external_psea_group, _ = Group.objects.get_or_create(name="PSEA Assessor") - - for partner_staff in PartnerStaffMember.objects.all(): - user = partner_staff.user - if not user: - logging.info(f"No user available for partner staff member with id: {partner_staff.id}") - continue - - profile = user.profile - groups = user.old_groups.all() - - if groups.exists(): - for group in groups: - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=partner_staff.partner.organization.id, - group_id=group.id, - is_active=partner_staff.active - )) - # if partner staff member has no groups, add IP Viewer group - else: - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=partner_staff.partner.organization.id, - group_id=ip_viewer_group.id, - is_active=partner_staff.active - )) - - if user.profile.country: - user_active_country = user.profile.country - else: - user_active_country = user.profile.country_override - - if user_active_country == country: - profile.organization_id = partner_staff.partner.organization.id - profile.save(update_fields=['organization_id']) - - unique_realms = [dict(t) for t in {tuple(sorted(d.items())) for d in realm_list}] - for realm_dict in unique_realms: - Realm.objects.get_or_create(**realm_dict) - - # cleanup from external psea group created during 0021_migrate_to_realms - Realm.objects.filter( - user__in=PartnerStaffMember.objects.all().values_list('user_id', flat=True), - country_id=country.id, - organization_id=external_psea_org.id, - group_id=external_psea_group.id, - ).delete() - - -class Migration(migrations.Migration): - dependencies = [ - ('partners', '0115_alter_partnerorganization_organization'), - ('users', '0021_migrate_to_realms'), - ('organizations', '0001_initial'), - ] - - operations = [ - migrations.RunPython(migrate_partnerstaffmembers, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0117_auto_20221102_1045.py b/src/etools/applications/partners/migrations/0117_auto_20221102_1045.py deleted file mode 100644 index 15043d63b7..0000000000 --- a/src/etools/applications/partners/migrations/0117_auto_20221102_1045.py +++ /dev/null @@ -1,129 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-02 10:45 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import etools.applications.partners.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0116_realms_partnerstaffmembers'), - ] - - operations = [ - # on FK field renaming, the old indexes are not renamed, so first drop them to avoid name collision - # https://code.djangoproject.com/ticket/23577 - migrations.AlterField( - model_name='agreement', - name='partner_manager', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_signed', to='partners.partnerstaffmember', verbose_name='Signed by partner'), - ), - migrations.AlterField( - model_name='intervention', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='signed_interventions', to='partners.partnerstaffmember', verbose_name='Signed by Partner'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerstaffmember', verbose_name='Signed by Partner'), - ), - migrations.RenameField( - model_name='agreement', - old_name='authorized_officers', - new_name='old_authorized_officers', - ), - migrations.RenameField( - model_name='intervention', - old_name='partner_focal_points', - new_name='old_partner_focal_points', - ), - migrations.RenameField( - model_name='agreement', - old_name='partner_manager', - new_name='old_partner_manager', - ), - migrations.RenameField( - model_name='intervention', - old_name='partner_authorized_officer_signatory', - new_name='old_partner_authorized_officer_signatory', - ), - migrations.RenameField( - model_name='interventionamendment', - old_name='partner_authorized_officer_signatory', - new_name='old_partner_authorized_officer_signatory', - ), - migrations.AddField( - model_name='agreement', - name='temp_authorized_officers', - field=models.ManyToManyField(blank=True, related_name='agreement_authorizations', to=settings.AUTH_USER_MODEL, verbose_name='Partner Authorized Officer'), - ), - migrations.AddField( - model_name='intervention', - name='temp_partner_focal_points', - field=models.ManyToManyField(blank=True, related_name='_partners_intervention_partner_focal_points_+', to=settings.AUTH_USER_MODEL, verbose_name='CSO Authorized Officials'), - ), - migrations.AddField( - model_name='agreement', - name='partner_manager', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_signed', to=settings.AUTH_USER_MODEL, verbose_name='Signed by partner'), - ), - migrations.AddField( - model_name='intervention', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='signed_interventions', to=settings.AUTH_USER_MODEL, verbose_name='Signed by Partner'), - ), - migrations.AddField( - model_name='interventionamendment', - name='partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Signed by Partner'), - ), - # https://docs.djangoproject.com/en/3.2/topics/migrations/#historical-models - # to be able to access model.objects in migrations - migrations.AlterModelManagers( - name='agreement', - managers=[ - ('view_objects', django.db.models.manager.Manager()), - ('objects', etools.applications.partners.models.MainAgreementManager()), - ], - ), - # change verbose name on old_ fields - migrations.AlterField( - model_name='agreement', - name='old_authorized_officers', - field=models.ManyToManyField(blank=True, related_name='agreement_authorizations', to='partners.PartnerStaffMember', verbose_name='(old)Partner Authorized Officer'), - ), - migrations.AlterField( - model_name='agreement', - name='old_partner_manager', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements_signed', to='partners.partnerstaffmember', verbose_name='(old)Signed by partner'), - ), - migrations.AlterField( - model_name='intervention', - name='old_partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='signed_interventions', to='partners.partnerstaffmember', verbose_name='(old)Signed by Partner'), - ), - migrations.AlterField( - model_name='intervention', - name='old_partner_focal_points', - field=models.ManyToManyField(blank=True, related_name='_partners_intervention_old_partner_focal_points_+', to='partners.PartnerStaffMember', verbose_name='(old)CSO Authorized Officials'), - ), - migrations.AlterField( - model_name='interventionamendment', - name='old_partner_authorized_officer_signatory', - field=models.ForeignKey(blank=True, db_index=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerstaffmember', verbose_name='(old)Signed by Partner'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='old_staff_members', to='partners.partnerorganization', verbose_name='Partner'), - ), - migrations.AlterField( - model_name='partnerstaffmember', - name='user', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='old_partner_staff_member', to=settings.AUTH_USER_MODEL, verbose_name='User'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0118_staff_members_to_users.py b/src/etools/applications/partners/migrations/0118_staff_members_to_users.py deleted file mode 100644 index dc04a934fd..0000000000 --- a/src/etools/applications/partners/migrations/0118_staff_members_to_users.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-02 10:51 - -from django.db import migrations - - -def migrate_staff_members_to_users(apps, schema_editor): - User = apps.get_model('users', 'User') - - PartnerStaffMember = apps.get_model('partners', 'PartnerStaffMember') - for psm in PartnerStaffMember.objects.all(): - if not psm.user: - continue - psm.user.first_name = psm.first_name - psm.user.last_name = psm.last_name - psm.user.save(update_fields=['first_name', 'last_name']) - - psm.user.profile.job_title = psm.title - psm.user.profile.phone_number = psm.phone - psm.user.profile.save(update_fields=['job_title', 'phone_number']) - - Agreement = apps.get_model('partners', 'Agreement') - for agreement in Agreement.objects.all(): - users = User.objects.filter( - id__in=agreement.old_authorized_officers.all().values_list('user_id', flat=True)) - agreement.temp_authorized_officers.add(*users) - if agreement.old_partner_manager: - agreement.partner_manager = agreement.old_partner_manager.user - agreement.save(update_fields=['partner_manager']) - - Intervention = apps.get_model('partners', 'Intervention') - for intervention in Intervention.objects.all(): - users = User.objects.filter( - id__in=intervention.old_partner_focal_points.all().values_list('user_id', flat=True)) - intervention.temp_partner_focal_points.add(*users) - if intervention.old_partner_authorized_officer_signatory: - intervention.partner_authorized_officer_signatory = intervention.old_partner_authorized_officer_signatory.user - intervention.save(update_fields=['partner_authorized_officer_signatory']) - - InterventionAmendment = apps.get_model('partners', 'InterventionAmendment') - for i_amendment in InterventionAmendment.objects.all(): - if i_amendment.old_partner_authorized_officer_signatory: - i_amendment.partner_authorized_officer_signatory = i_amendment.old_partner_authorized_officer_signatory.user - i_amendment.save(update_fields=['partner_authorized_officer_signatory']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0117_auto_20221102_1045'), - ] - - operations = [ - migrations.RunPython(migrate_staff_members_to_users, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/partners/migrations/0119_auto_20221107_1015.py b/src/etools/applications/partners/migrations/0119_auto_20221107_1015.py deleted file mode 100644 index dbeb19010f..0000000000 --- a/src/etools/applications/partners/migrations/0119_auto_20221107_1015.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.6 on 2022-11-07 10:15 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0118_staff_members_to_users'), - ] - - operations = [ - migrations.RenameField( - model_name='agreement', - old_name='temp_authorized_officers', - new_name='authorized_officers', - ), - migrations.RenameField( - model_name='intervention', - old_name='temp_partner_focal_points', - new_name='partner_focal_points', - ), - migrations.AlterField( - model_name='intervention', - name='partner_focal_points', - field=models.ManyToManyField(blank=True, related_name='_partners_intervention_partner_focal_points_+', to=settings.AUTH_USER_MODEL, verbose_name='CSO Authorized Officials'), - ), - ] diff --git a/src/etools/applications/partners/migrations/0120_merge_20230502_1523.py b/src/etools/applications/partners/migrations/0120_merge_20230502_1523.py deleted file mode 100644 index 12e4fe31f1..0000000000 --- a/src/etools/applications/partners/migrations/0120_merge_20230502_1523.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2023-05-02 15:23 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0113_alter_intervention_title'), - ('partners', '0119_auto_20221107_1015'), - ] - - operations = [ - ] diff --git a/src/etools/applications/partners/migrations/0121_auto_20230814_1058.py b/src/etools/applications/partners/migrations/0121_auto_20230814_1058.py deleted file mode 100644 index 554164cd57..0000000000 --- a/src/etools/applications/partners/migrations/0121_auto_20230814_1058.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 3.2.19 on 2023-08-14 10:58 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0120_merge_20230502_1523'), - ] - - operations = [ - migrations.RemoveField( - model_name='agreement', - name='old_authorized_officers', - ), - migrations.RemoveField( - model_name='agreement', - name='old_partner_manager', - ), - migrations.RemoveField( - model_name='intervention', - name='old_partner_authorized_officer_signatory', - ), - migrations.RemoveField( - model_name='intervention', - name='old_partner_focal_points', - ), - migrations.RemoveField( - model_name='interventionamendment', - name='old_partner_authorized_officer_signatory', - ), - migrations.DeleteModel( - name='PartnerStaffMember', - ), - ] diff --git a/src/etools/applications/partners/tests/test_api_amendments.py b/src/etools/applications/partners/tests/test_api_amendments.py index b9816e1f0f..e7c1844c07 100644 --- a/src/etools/applications/partners/tests/test_api_amendments.py +++ b/src/etools/applications/partners/tests/test_api_amendments.py @@ -87,6 +87,8 @@ def setUp(self): class TestInterventionAmendments(BaseTestInterventionAmendments, BaseTenantTestCase): + fixtures = ('groups',) + def test_no_permission_user_forbidden(self): '''Ensure a non-staff user gets the 403 smackdown''' response = self.forced_auth_req( diff --git a/src/etools/applications/partners/tests/test_v3_interventions.py b/src/etools/applications/partners/tests/test_v3_interventions.py index 8aa5abdda4..b137ad6108 100644 --- a/src/etools/applications/partners/tests/test_v3_interventions.py +++ b/src/etools/applications/partners/tests/test_v3_interventions.py @@ -2352,6 +2352,8 @@ def test_submission_date_not_changed_if_set(self): class TestInterventionReview(BaseInterventionActionTestCase): + fixtures = ('groups',) + def setUp(self): super().setUp() self.url = reverse( diff --git a/src/etools/applications/permissions2/migrations/0001_initial.py b/src/etools/applications/permissions2/migrations/0001_initial.py index 40519fe710..7949c343a2 100644 --- a/src/etools/applications/permissions2/migrations/0001_initial.py +++ b/src/etools/applications/permissions2/migrations/0001_initial.py @@ -1,4 +1,5 @@ -# Generated by Django 1.9.10 on 2017-08-03 15:45 +# Generated by Django 3.2.19 on 2024-07-19 11:57 + import django.contrib.postgres.fields from django.db import migrations, models @@ -15,13 +16,10 @@ class Migration(migrations.Migration): name='Permission', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('permission', models.CharField(choices=[('view', 'View'), - ('edit', 'Edit'), ('action', 'Action')], max_length=10)), - ('permission_type', models.CharField(choices=[ - ('allow', 'Allow'), ('disallow', 'Disallow')], default='allow', max_length=10)), + ('permission', models.CharField(choices=[('view', 'View'), ('edit', 'Edit'), ('action', 'Action')], max_length=10)), + ('permission_type', models.CharField(choices=[('allow', 'Allow'), ('disallow', 'Disallow')], default='allow', max_length=10)), ('target', models.CharField(max_length=100)), - ('condition', django.contrib.postgres.fields.ArrayField( - base_field=models.CharField(max_length=100), default=[], size=None)), + ('condition', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, size=None)), ], ), ] diff --git a/src/etools/applications/permissions2/migrations/0002_auto_20170907_1031.py b/src/etools/applications/permissions2/migrations/0002_auto_20170907_1031.py deleted file mode 100644 index 990966aa9d..0000000000 --- a/src/etools/applications/permissions2/migrations/0002_auto_20170907_1031.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.9.10 on 2017-09-07 10:31 -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('permissions2', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='permission', - name='condition', - field=django.contrib.postgres.fields.ArrayField( - base_field=models.CharField(max_length=100), blank=True, default=[], size=None), - ), - ] diff --git a/src/etools/applications/permissions2/migrations/0003_auto_20181229_0249.py b/src/etools/applications/permissions2/migrations/0003_auto_20181229_0249.py deleted file mode 100644 index 8465fc5531..0000000000 --- a/src/etools/applications/permissions2/migrations/0003_auto_20181229_0249.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.0.9 on 2018-12-29 02:49 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('permissions2', '0002_auto_20170907_1031'), - ] - - operations = [ - migrations.AlterField( - model_name='permission', - name='condition', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, size=None), - ), - ] diff --git a/src/etools/applications/psea/migrations/0001_initial.py b/src/etools/applications/psea/migrations/0001_initial.py index e88edf4446..a8a013133c 100644 --- a/src/etools/applications/psea/migrations/0001_initial.py +++ b/src/etools/applications/psea/migrations/0001_initial.py @@ -1,6 +1,5 @@ -# Generated by Django 2.2.4 on 2019-08-16 13:02 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone @@ -13,9 +12,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('purchase_order', '0007_auto_20190625_1437'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0038_auto_20190620_2024'), + ('action_points', '0001_initial'), ] operations = [ @@ -32,6 +29,19 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Answers', }, ), + migrations.CreateModel( + name='AnswerEvidence', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ], + options={ + 'verbose_name': 'Answer Evidence', + 'verbose_name_plural': 'Answer Evidences', + }, + ), migrations.CreateModel( name='Assessment', fields=[ @@ -41,8 +51,9 @@ class Migration(migrations.Migration): ('reference_number', models.CharField(max_length=100, unique=True, verbose_name='Reference Number')), ('overall_rating', models.IntegerField(blank=True, null=True)), ('assessment_date', models.DateField(blank=True, null=True, verbose_name='Assessment Date')), - ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('final', 'Final'), ('cancelled', 'Cancelled')], default='draft', max_length=30, verbose_name='Status')), - ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='psea_assessment', to='partners.PartnerOrganization', verbose_name='Partner')), + ('assessment_type', models.CharField(choices=[('unicef_2020', 'UNICEF Assessment 2020'), ('un_common_other', 'UN Common Assessment- Other UN'), ('un_common_unicef', 'UN Common Assessment- UNICEF')], default='unicef_2020', max_length=16)), + ('assessment_ingo_reason', models.CharField(blank=True, choices=[('decentralized', 'Decentralization of INGO'), ('sea_allegation', 'SEA allegation'), ('global_policy_implemented', 'Global policy not being implemented at country-level'), ('high_risk_context', 'High risk context')], max_length=32, null=True)), + ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('final', 'Final'), ('cancelled', 'Cancelled')], default='draft', max_length=30, verbose_name='Status')), ], options={ 'verbose_name': 'Assessment', @@ -50,6 +61,21 @@ class Migration(migrations.Migration): 'ordering': ('-assessment_date',), }, ), + migrations.CreateModel( + name='AssessmentStatusHistory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('status', models.CharField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('final', 'Final'), ('cancelled', 'Cancelled')], max_length=30)), + ('comment', models.TextField(blank=True)), + ], + options={ + 'verbose_name': 'Assessment Status History', + 'verbose_name_plural': 'Assessment Status History', + 'ordering': ('-created',), + }, + ), migrations.CreateModel( name='Evidence', fields=[ @@ -80,14 +106,30 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Ratings', }, ), + migrations.CreateModel( + name='AssessmentActionPoint', + fields=[ + ], + options={ + 'verbose_name': 'PSEA Assessment Action Point', + 'verbose_name_plural': 'PSEA Assessment Action Points', + 'abstract': False, + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('action_points.actionpoint',), + ), migrations.CreateModel( name='Indicator', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.PositiveIntegerField(db_index=True, editable=False, verbose_name='order')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('subject', models.TextField(verbose_name='Subject')), ('content', models.TextField(verbose_name='Content')), + ('rating_instructions', models.TextField(blank=True, verbose_name='Rating Instructions')), ('active', models.BooleanField(default=True)), ('evidences', models.ManyToManyField(to='psea.Evidence', verbose_name='Evidences')), ('ratings', models.ManyToManyField(to='psea.Rating', verbose_name='Rating')), @@ -95,6 +137,7 @@ class Migration(migrations.Migration): options={ 'verbose_name': 'Indicator', 'verbose_name_plural': 'Indicators', + 'ordering': ('order',), }, ), migrations.CreateModel( @@ -103,66 +146,13 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('assessor_type', models.CharField(choices=[('external', 'External Individual'), ('unicef', 'UNICEF Staff'), ('vendor', 'Assessing Firm')], max_length=30, verbose_name='Type')), + ('assessor_type', models.CharField(choices=[('external', 'External Individual'), ('staff', 'UNICEF Staff'), ('firm', 'Assessing Firm')], max_length=30, verbose_name='Type')), ('order_number', models.CharField(blank=True, max_length=30, verbose_name='Order Number')), - ('assessment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.Assessment', verbose_name='Assessment')), - ('auditor_firm', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='purchase_order.AuditorFirm', verbose_name='Auditor')), - ('auditor_firm_staff', models.ManyToManyField(blank=True, to='purchase_order.AuditorStaffMember', verbose_name='Auditor Staff')), - ('focal_points', models.ManyToManyField(blank=True, related_name='assessor_focal_point', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')), + ('assessment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='assessor', to='psea.assessment', verbose_name='Assessment')), ], options={ 'verbose_name': 'Assessor', 'verbose_name_plural': 'Assessors', }, ), - migrations.CreateModel( - name='AssessmentStatusHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('status', models.CharField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('final', 'Final'), ('cancelled', 'Cancelled')], max_length=30)), - ('assessment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='status_history', to='psea.Assessment', verbose_name='Assessment')), - ], - options={ - 'verbose_name': 'Assessment Status History', - 'verbose_name_plural': 'Assessment Status History', - 'ordering': ('-created',), - }, - ), - migrations.CreateModel( - name='AnswerEvidence', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('description', models.TextField(blank=True, null=True, verbose_name='Description')), - ('answer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='evidences', to='psea.Answer', verbose_name='Answer')), - ('evidence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.Evidence', verbose_name='Evidence')), - ], - options={ - 'verbose_name': 'Answer Evidence', - 'verbose_name_plural': 'Answer Evidences', - }, - ), - migrations.AddField( - model_name='answer', - name='assessment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.Assessment', verbose_name='Assessment'), - ), - migrations.AddField( - model_name='answer', - name='indicator', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.Indicator', verbose_name='Indicator'), - ), - migrations.AddField( - model_name='answer', - name='rating', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.Rating', verbose_name='Rating'), - ), - migrations.AlterUniqueTogether( - name='answer', - unique_together={('assessment', 'indicator')}, - ), ] diff --git a/src/etools/applications/psea/migrations/0002_assessor_auditor_firm.py b/src/etools/applications/psea/migrations/0002_assessor_auditor_firm.py new file mode 100644 index 0000000000..d9be51fa86 --- /dev/null +++ b/src/etools/applications/psea/migrations/0002_assessor_auditor_firm.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('psea', '0001_initial'), + ('purchase_order', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='assessor', + name='auditor_firm', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='purchase_order.auditorfirm', verbose_name='Auditor'), + ), + ] diff --git a/src/etools/applications/psea/migrations/0002_auto_20190820_1618.py b/src/etools/applications/psea/migrations/0002_auto_20190820_1618.py deleted file mode 100644 index 51f39a809c..0000000000 --- a/src/etools/applications/psea/migrations/0002_auto_20190820_1618.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-20 16:18 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='answer', - name='assessment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='psea.Assessment', verbose_name='Assessment'), - ), - migrations.AlterField( - model_name='assessor', - name='assessment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assessors', to='psea.Assessment', verbose_name='Assessment'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0003_auto_20190826_1416.py b/src/etools/applications/psea/migrations/0003_auto_20190826_1416.py deleted file mode 100644 index 660cb2f537..0000000000 --- a/src/etools/applications/psea/migrations/0003_auto_20190826_1416.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-26 14:16 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('psea', '0002_auto_20190820_1618'), - ] - - operations = [ - migrations.RemoveField( - model_name='assessor', - name='focal_points', - ), - migrations.AddField( - model_name='assessment', - name='focal_points', - field=models.ManyToManyField(blank=True, related_name='assessor_focal_point', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0003_initial.py b/src/etools/applications/psea/migrations/0003_initial.py new file mode 100644 index 0000000000..2eebd7538c --- /dev/null +++ b/src/etools/applications/psea/migrations/0003_initial.py @@ -0,0 +1,73 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('partners', '0002_initial'), + ('psea', '0002_assessor_auditor_firm'), + ] + + operations = [ + migrations.AddField( + model_name='assessor', + name='auditor_firm_staff', + field=models.ManyToManyField(blank=True, related_name='_psea_assessor_auditor_firm_staff_+', to=settings.AUTH_USER_MODEL, verbose_name='Auditor Staff'), + ), + migrations.AddField( + model_name='assessor', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='assessmentstatushistory', + name='assessment', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='status_history', to='psea.assessment', verbose_name='Assessment'), + ), + migrations.AddField( + model_name='assessment', + name='focal_points', + field=models.ManyToManyField(blank=True, related_name='pse_assessment_focal_point', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), + ), + migrations.AddField( + model_name='assessment', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='psea_assessment', to='partners.partnerorganization', verbose_name='Partner'), + ), + migrations.AddField( + model_name='answerevidence', + name='answer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='evidences', to='psea.answer', verbose_name='Answer'), + ), + migrations.AddField( + model_name='answerevidence', + name='evidence', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.evidence', verbose_name='Evidence'), + ), + migrations.AddField( + model_name='answer', + name='assessment', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='psea.assessment', verbose_name='Assessment'), + ), + migrations.AddField( + model_name='answer', + name='indicator', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.indicator', verbose_name='Indicator'), + ), + migrations.AddField( + model_name='answer', + name='rating', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='psea.rating', verbose_name='Rating'), + ), + migrations.AlterUniqueTogether( + name='answer', + unique_together={('assessment', 'indicator')}, + ), + ] diff --git a/src/etools/applications/psea/migrations/0004_assessmentstatushistory_comment.py b/src/etools/applications/psea/migrations/0004_assessmentstatushistory_comment.py deleted file mode 100644 index 883d2a0bd6..0000000000 --- a/src/etools/applications/psea/migrations/0004_assessmentstatushistory_comment.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-28 12:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0003_auto_20190826_1416'), - ] - - operations = [ - migrations.AddField( - model_name='assessmentstatushistory', - name='comment', - field=models.TextField(blank=True), - ), - ] diff --git a/src/etools/applications/psea/migrations/0005_auto_20190828_1726.py b/src/etools/applications/psea/migrations/0005_auto_20190828_1726.py deleted file mode 100644 index 3b14a5362e..0000000000 --- a/src/etools/applications/psea/migrations/0005_auto_20190828_1726.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-28 17:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0004_assessmentstatushistory_comment'), - ] - - operations = [ - migrations.AlterField( - model_name='assessor', - name='assessment', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='assessor', to='psea.Assessment', verbose_name='Assessment'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0006_auto_20190829_1227.py b/src/etools/applications/psea/migrations/0006_auto_20190829_1227.py deleted file mode 100644 index c3ed094ee9..0000000000 --- a/src/etools/applications/psea/migrations/0006_auto_20190829_1227.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-29 12:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0005_auto_20190828_1726'), - ] - - operations = [ - migrations.AlterField( - model_name='assessor', - name='assessor_type', - field=models.CharField(choices=[('external', 'External Individual'), ('staff', 'UNICEF Staff'), ('firm', 'Assessing Firm')], max_length=30, verbose_name='Type'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0007_auto_20190906_1513.py b/src/etools/applications/psea/migrations/0007_auto_20190906_1513.py deleted file mode 100644 index df199e7b32..0000000000 --- a/src/etools/applications/psea/migrations/0007_auto_20190906_1513.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-06 15:13 - -from django.db import migrations, models -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0006_auto_20190829_1227'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='status', - field=django_fsm.FSMField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('final', 'Final'), ('cancelled', 'Cancelled')], default='draft', max_length=30, verbose_name='Status'), - ), - migrations.AlterField( - model_name='assessmentstatushistory', - name='status', - field=models.CharField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('final', 'Final'), ('cancelled', 'Cancelled')], max_length=30), - ), - ] diff --git a/src/etools/applications/psea/migrations/0008_assessmentactionpoint.py b/src/etools/applications/psea/migrations/0008_assessmentactionpoint.py deleted file mode 100644 index d55657783c..0000000000 --- a/src/etools/applications/psea/migrations/0008_assessmentactionpoint.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-10 11:29 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0010_actionpoint_psea_assessment'), - ('psea', '0007_auto_20190906_1513'), - ] - - operations = [ - migrations.CreateModel( - name='AssessmentActionPoint', - fields=[ - ], - options={ - 'verbose_name': 'PSEA Assessment Action Point', - 'verbose_name_plural': 'PSEA Assessment Action Points', - 'abstract': False, - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('action_points.actionpoint',), - ), - ] diff --git a/src/etools/applications/psea/migrations/0009_auto_20190917_1128.py b/src/etools/applications/psea/migrations/0009_auto_20190917_1128.py deleted file mode 100644 index 364b3a509a..0000000000 --- a/src/etools/applications/psea/migrations/0009_auto_20190917_1128.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-17 11:28 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0008_assessmentactionpoint'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='focal_points', - field=models.ManyToManyField(blank=True, related_name='pse_assessment_focal_point', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0010_indicator_order.py b/src/etools/applications/psea/migrations/0010_indicator_order.py deleted file mode 100644 index 9f9b9cf185..0000000000 --- a/src/etools/applications/psea/migrations/0010_indicator_order.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-20 17:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0009_auto_20190917_1128'), - ] - - operations = [ - migrations.AddField( - model_name='indicator', - name='order', - field=models.PositiveIntegerField(db_index=True, default=1, editable=False, verbose_name='order'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/psea/migrations/0011_indicator_rating_instructions.py b/src/etools/applications/psea/migrations/0011_indicator_rating_instructions.py deleted file mode 100644 index fc5e1bf360..0000000000 --- a/src/etools/applications/psea/migrations/0011_indicator_rating_instructions.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-20 17:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0010_indicator_order'), - ] - - operations = [ - migrations.AddField( - model_name='indicator', - name='rating_instructions', - field=models.TextField(blank=True, verbose_name='Rating Instructions'), - ), - ] diff --git a/src/etools/applications/psea/migrations/0012_auto_20191004_1752.py b/src/etools/applications/psea/migrations/0012_auto_20191004_1752.py deleted file mode 100644 index e83759831a..0000000000 --- a/src/etools/applications/psea/migrations/0012_auto_20191004_1752.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-04 17:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0011_indicator_rating_instructions'), - ] - - operations = [ - migrations.AlterModelOptions( - name='indicator', - options={'ordering': ('order',), 'verbose_name': 'Indicator', 'verbose_name_plural': 'Indicators'}, - ), - ] diff --git a/src/etools/applications/psea/migrations/0013_auto_20210505_1620.py b/src/etools/applications/psea/migrations/0013_auto_20210505_1620.py deleted file mode 100644 index dd519e0bc3..0000000000 --- a/src/etools/applications/psea/migrations/0013_auto_20210505_1620.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.20 on 2021-05-05 16:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0012_auto_20191004_1752'), - ] - - operations = [ - migrations.AddField( - model_name='assessment', - name='assessment_ingo_reason', - field=models.CharField(blank=True, choices=[('decentralized', 'Decentralization of INGO'), ('sea_allegation', 'SEA allegation'), ('global_policy_implemented', 'Global policy not being implemented at country-level'), ('high_risk_context', 'High risk context')], max_length=16, null=True), - ), - migrations.AddField( - model_name='assessment', - name='assessment_type', - field=models.CharField(choices=[('unicef_2020', 'UNICEF Assessment 2020'), ('un_common_other', 'Assessment- Other UN'), ('un_common_unicef', 'Assessment- UNICEF')], default='unicef_2020', max_length=16), - ), - ] diff --git a/src/etools/applications/psea/migrations/0014_auto_20210518_1411.py b/src/etools/applications/psea/migrations/0014_auto_20210518_1411.py deleted file mode 100644 index 5d36ea154a..0000000000 --- a/src/etools/applications/psea/migrations/0014_auto_20210518_1411.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.20 on 2021-05-18 14:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0013_auto_20210505_1620'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='assessment_type', - field=models.CharField(choices=[('unicef_2020', 'UNICEF Assessment 2020'), ('un_common_other', 'UN Common Assessment- Other UN'), ('un_common_unicef', 'UN Common Assessment- UNICEF')], default='unicef_2020', max_length=16), - ), - ] diff --git a/src/etools/applications/psea/migrations/0015_auto_20210607_1657.py b/src/etools/applications/psea/migrations/0015_auto_20210607_1657.py deleted file mode 100644 index afe2794b47..0000000000 --- a/src/etools/applications/psea/migrations/0015_auto_20210607_1657.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.20 on 2021-06-07 16:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('psea', '0014_auto_20210518_1411'), - ] - - operations = [ - migrations.AlterField( - model_name='assessment', - name='assessment_ingo_reason', - field=models.CharField(blank=True, choices=[('decentralized', 'Decentralization of INGO'), ('sea_allegation', 'SEA allegation'), ('global_policy_implemented', 'Global policy not being implemented at country-level'), ('high_risk_context', 'High risk context')], max_length=32, null=True), - ), - ] diff --git a/src/etools/applications/psea/migrations/0016_alter_assessor_auditor_firm_staff.py b/src/etools/applications/psea/migrations/0016_alter_assessor_auditor_firm_staff.py deleted file mode 100644 index 144b60a1e1..0000000000 --- a/src/etools/applications/psea/migrations/0016_alter_assessor_auditor_firm_staff.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-16 09:30 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('psea', '0015_auto_20210607_1657'), - ] - - operations = [ - migrations.RenameField( - model_name='assessor', - old_name='auditor_firm_staff', - new_name='old_auditor_firm_staff', - ) - ] diff --git a/src/etools/applications/psea/migrations/0017_auto_20221216_0934.py b/src/etools/applications/psea/migrations/0017_auto_20221216_0934.py deleted file mode 100644 index 88e6bbe653..0000000000 --- a/src/etools/applications/psea/migrations/0017_auto_20221216_0934.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-16 09:34 - -from django.conf import settings -from django.db import migrations, models, connection - - -def migrate_auditor_firm_staff_to_users(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - Assessor = apps.get_model('psea', 'Assessor') - - for a in Assessor.objects.all(): - a.auditor_firm_staff.add(*[staff_member.user for staff_member in a.old_auditor_firm_staff.all().select_related('user')]) - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('psea', '0016_alter_assessor_auditor_firm_staff'), - ] - - operations = [ - migrations.AddField( - model_name='assessor', - name='auditor_firm_staff', - field=models.ManyToManyField(blank=True, related_name='_psea_assessor_auditor_firm_staff_+', to=settings.AUTH_USER_MODEL, verbose_name='Auditor Staff'), - ), - migrations.RunPython(migrate_auditor_firm_staff_to_users, migrations.RunPython.noop), - migrations.RemoveField( - model_name='assessor', - name='old_auditor_firm_staff', - ), - ] diff --git a/src/etools/applications/publics/migrations/0001_initial.py b/src/etools/applications/publics/migrations/0001_initial.py index 6beeac5d17..d026cefee0 100644 --- a/src/etools/applications/publics/migrations/0001_initial.py +++ b/src/etools/applications/publics/migrations/0001_initial.py @@ -1,10 +1,9 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import datetime - +from django.db import migrations, models import django.db.models.deletion import django.db.models.manager -from django.db import migrations, models from django.utils.timezone import utc @@ -20,8 +19,7 @@ class Migration(migrations.Migration): name='AirlineCompany', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=255, verbose_name='Name')), ('code', models.IntegerField(verbose_name='Code')), ('iata', models.CharField(max_length=3, verbose_name='IATA')), @@ -39,8 +37,7 @@ class Migration(migrations.Migration): name='BusinessArea', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('code', models.CharField(max_length=32, verbose_name='Code')), ], @@ -55,8 +52,7 @@ class Migration(migrations.Migration): name='BusinessRegion', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=16, verbose_name='Name')), ('code', models.CharField(max_length=2, verbose_name='Code')), ], @@ -71,18 +67,16 @@ class Migration(migrations.Migration): name='Country', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=64, verbose_name='Name')), ('long_name', models.CharField(max_length=128, verbose_name='Long Name')), ('vision_code', models.CharField(max_length=3, null=True, unique=True, verbose_name='Vision Code')), - ('iso_2', models.CharField(max_length=2, null=True, verbose_name='ISO code 2')), - ('iso_3', models.CharField(max_length=3, null=True, verbose_name='ISO code 3')), - ('dsa_code', models.CharField(max_length=3, null=True, verbose_name='DSA Code')), + ('iso_2', models.CharField(default='', max_length=2, verbose_name='ISO code 2')), + ('iso_3', models.CharField(default='', max_length=3, verbose_name='ISO code 3')), + ('dsa_code', models.CharField(default='', max_length=3, verbose_name='DSA Code')), ('valid_from', models.DateField(null=True, verbose_name='Valid From')), ('valid_to', models.DateField(null=True, verbose_name='Valid To')), - ('business_area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='countries', to='publics.BusinessArea', verbose_name='Business Area')), + ('business_area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='countries', to='publics.businessarea', verbose_name='Business Area')), ], options={ 'verbose_name_plural': 'Countries', @@ -95,8 +89,7 @@ class Migration(migrations.Migration): name='Currency', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('code', models.CharField(max_length=5, verbose_name='Code')), ('decimal_places', models.PositiveIntegerField(default=0, verbose_name='Decimal Places')), @@ -109,94 +102,16 @@ class Migration(migrations.Migration): ], ), migrations.CreateModel( - name='DSARate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('effective_from_date', models.DateField(verbose_name='Effective From Date')), - ('effective_to_date', models.DateField(default=datetime.date(2999, 12, 31), verbose_name='Effective To Date')), - ('dsa_amount_usd', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA amount USD')), - ('dsa_amount_60plus_usd', models.DecimalField(decimal_places=4, - max_digits=20, verbose_name='DSA amount 60 plus USD')), - ('dsa_amount_local', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA amount local')), - ('dsa_amount_60plus_local', models.DecimalField(decimal_places=4, - max_digits=20, verbose_name='DSA Amount 60 plus local')), - ('room_rate', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='Zoom Rate')), - ('finalization_date', models.DateField(verbose_name='Finalization Date')), - ], - ), - migrations.CreateModel( - name='DSARateUpload', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('dsa_file', models.FileField(upload_to='publics/dsa_rate/', verbose_name='DSA File')), - ('status', models.CharField(blank=True, choices=[('uploaded', 'Uploaded'), ('processing', 'Processing'), ( - 'failed', 'Failed'), ('done', 'Done')], max_length=64, null=True, verbose_name='Status')), - ('upload_date', models.DateTimeField(auto_now_add=True, verbose_name='Upload Date')), - ('errors', models.JSONField( - blank=True, default=dict, null=True, verbose_name='Errors')), - ], - ), - migrations.CreateModel( - name='DSARegion', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('area_name', models.CharField(max_length=120, verbose_name='Area Name')), - ('area_code', models.CharField(max_length=3, verbose_name='Area Code')), - ('user_defined', models.BooleanField(default=False, verbose_name='Defined User')), - ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='dsa_regions', to='publics.Country', verbose_name='Country')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='ExchangeRate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('valid_from', models.DateField(verbose_name='Valid From')), - ('valid_to', models.DateField(verbose_name='Valid To')), - ('x_rate', models.DecimalField(decimal_places=5, max_digits=10, verbose_name='X Rate')), - ('currency', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='exchange_rates', to='publics.Currency', verbose_name='Currency')), - ], - options={ - 'ordering': ('valid_from',), - }, - managers=[ - ('admin_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='Fund', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('name', models.CharField(max_length=25, verbose_name='Name')), - ], - options={ - 'abstract': False, - }, - managers=[ - ('admin_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='Grant', + name='TravelExpenseType', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('name', models.CharField(max_length=25, verbose_name='Name')), - ('funds', models.ManyToManyField(related_name='grants', to='publics.Fund', verbose_name='Funds')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('title', models.CharField(max_length=128, verbose_name='Title')), + ('vendor_number', models.CharField(max_length=128, verbose_name='Vendor Number')), + ('rank', models.PositiveIntegerField(default=100, verbose_name='Rank')), ], options={ - 'abstract': False, + 'ordering': ('rank', 'title'), }, managers=[ ('admin_objects', django.db.models.manager.Manager()), @@ -206,13 +121,12 @@ class Migration(migrations.Migration): name='TravelAgent', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('code', models.CharField(max_length=128, verbose_name='Code')), - ('city', models.CharField(max_length=128, null=True, verbose_name='City')), - ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='publics.Country', verbose_name='Country')), + ('city', models.CharField(default='', max_length=128, verbose_name='City')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='publics.country', verbose_name='Country')), + ('expense_type', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='travel_agent', to='publics.travelexpensetype', verbose_name='Expense Type')), ], options={ 'abstract': False, @@ -222,72 +136,67 @@ class Migration(migrations.Migration): ], ), migrations.CreateModel( - name='TravelExpenseType', + name='ExchangeRate', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('title', models.CharField(max_length=128, verbose_name='Title')), - ('vendor_number', models.CharField(max_length=128, verbose_name='Vendor Number')), - ('rank', models.PositiveIntegerField(default=100, verbose_name='Rank')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('valid_from', models.DateField(verbose_name='Valid From')), + ('valid_to', models.DateField(verbose_name='Valid To')), + ('x_rate', models.DecimalField(decimal_places=5, max_digits=10, verbose_name='X Rate')), + ('currency', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exchange_rates', to='publics.currency', verbose_name='Currency')), ], options={ - 'ordering': ('rank', 'title'), + 'ordering': ('valid_from',), }, managers=[ ('admin_objects', django.db.models.manager.Manager()), ], ), migrations.CreateModel( - name='WBS', + name='DSARegion', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('name', models.CharField(max_length=25, verbose_name='Name')), - ('business_area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='publics.BusinessArea', verbose_name='Business Area')), - ('grants', models.ManyToManyField(related_name='wbs', to='publics.Grant', verbose_name='Grants')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('area_name', models.CharField(max_length=120, verbose_name='Area Name')), + ('area_code', models.CharField(max_length=3, verbose_name='Area Code')), + ('user_defined', models.BooleanField(default=False, verbose_name='Defined User')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dsa_regions', to='publics.country', verbose_name='Country')), ], options={ - 'verbose_name_plural': 'WBSes', + 'abstract': False, }, - managers=[ - ('admin_objects', django.db.models.manager.Manager()), - ], - ), - migrations.AddField( - model_name='travelagent', - name='expense_type', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='travel_agent', to='publics.TravelExpenseType', verbose_name='Expense Type'), - ), - migrations.AddField( - model_name='dsarate', - name='region', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='rates', to='publics.DSARegion', verbose_name='Region'), ), migrations.AddField( model_name='country', name='currency', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='publics.Currency', verbose_name='Currency'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='publics.currency', verbose_name='Currency'), ), migrations.AddField( model_name='businessarea', name='default_currency', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.Currency', verbose_name='Default Currency'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='publics.currency', verbose_name='Default Currency'), ), migrations.AddField( model_name='businessarea', name='region', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='business_areas', to='publics.BusinessRegion', verbose_name='Region'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='business_areas', to='publics.businessregion', verbose_name='Region'), ), - migrations.AlterUniqueTogether( - name='dsarate', - unique_together=set([('region', 'effective_to_date')]), + migrations.CreateModel( + name='DSARate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('effective_from_date', models.DateField(verbose_name='Effective From Date')), + ('effective_to_date', models.DateField(default=datetime.date(2999, 12, 31), verbose_name='Effective To Date')), + ('dsa_amount_usd', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA amount USD')), + ('dsa_amount_60plus_usd', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA amount 60 plus USD')), + ('dsa_amount_local', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA amount local')), + ('dsa_amount_60plus_local', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='DSA Amount 60 plus local')), + ('room_rate', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='Zoom Rate')), + ('finalization_date', models.DateField(verbose_name='Finalization Date')), + ('region', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rates', to='publics.dsaregion', verbose_name='Region')), + ], + options={ + 'unique_together': {('region', 'effective_to_date')}, + }, ), ] diff --git a/src/etools/applications/publics/migrations/0002_fix_null_values.py b/src/etools/applications/publics/migrations/0002_fix_null_values.py deleted file mode 100644 index 3026019ffa..0000000000 --- a/src/etools/applications/publics/migrations/0002_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('publics', '0001_initial'), - ] - - operations = [ - ] diff --git a/src/etools/applications/publics/migrations/0003_make_not_nullable.py b/src/etools/applications/publics/migrations/0003_make_not_nullable.py deleted file mode 100644 index 4d68152a8c..0000000000 --- a/src/etools/applications/publics/migrations/0003_make_not_nullable.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-19 16:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('publics', '0002_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='country', - name='dsa_code', - field=models.CharField(default='', max_length=3, verbose_name='DSA Code'), - ), - migrations.AlterField( - model_name='country', - name='iso_2', - field=models.CharField(default='', max_length=2, verbose_name='ISO code 2'), - ), - migrations.AlterField( - model_name='country', - name='iso_3', - field=models.CharField(default='', max_length=3, verbose_name='ISO code 3'), - ), - migrations.AlterField( - model_name='dsarateupload', - name='status', - field=models.CharField(blank=True, choices=[('uploaded', 'Uploaded'), ('processing', 'Processing'), ( - 'failed', 'Failed'), ('done', 'Done')], default='', max_length=64, verbose_name='Status'), - ), - migrations.AlterField( - model_name='travelagent', - name='city', - field=models.CharField(default='', max_length=128, verbose_name='City'), - ), - ] diff --git a/src/etools/applications/publics/migrations/0004_auto_20190220_2033.py b/src/etools/applications/publics/migrations/0004_auto_20190220_2033.py deleted file mode 100644 index 390be35d39..0000000000 --- a/src/etools/applications/publics/migrations/0004_auto_20190220_2033.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 2.1.5 on 2019-02-20 20:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('publics', '0003_make_not_nullable'), - ] - - operations = [ - migrations.RemoveField( - model_name='grant', - name='funds', - ), - migrations.RemoveField( - model_name='wbs', - name='business_area', - ), - migrations.RemoveField( - model_name='wbs', - name='grants', - ), - migrations.DeleteModel( - name='Fund', - ), - migrations.DeleteModel( - name='Grant', - ), - migrations.DeleteModel( - name='WBS', - ), - ] diff --git a/src/etools/applications/publics/migrations/0005_delete_dsarateupload.py b/src/etools/applications/publics/migrations/0005_delete_dsarateupload.py deleted file mode 100644 index 3bc20eaffd..0000000000 --- a/src/etools/applications/publics/migrations/0005_delete_dsarateupload.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 2.1.8 on 2019-04-25 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('publics', '0004_auto_20190220_2033'), - ] - - operations = [ - migrations.DeleteModel( - name='DSARateUpload', - ), - ] diff --git a/src/etools/applications/publics/migrations/0006_auto_20190625_1547.py b/src/etools/applications/publics/migrations/0006_auto_20190625_1547.py deleted file mode 100644 index 04335c11d9..0000000000 --- a/src/etools/applications/publics/migrations/0006_auto_20190625_1547.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 2.2.1 on 2019-06-25 15:47 - -from django.db import migrations - -FROM_CODE = "MRO" -TO_CODE = "MRU" - - -def update_mauritania_currency(apps, schema_editor): - Currency = apps.get_model("publics", "currency") - Currency.admin_objects.filter(code=FROM_CODE).update(code=TO_CODE) - - -def reverse_currency_update(apps, schema_editor): - Currency = apps.get_model("publics", "currency") - Currency.admin_objects.filter(code=TO_CODE).update(code=FROM_CODE) - - -class Migration(migrations.Migration): - - dependencies = [ - ('publics', '0005_delete_dsarateupload'), - ] - - operations = [ - migrations.RunPython( - update_mauritania_currency, - reverse_currency_update, - ), - ] diff --git a/src/etools/applications/reports/migrations/0001_initial.py b/src/etools/applications/reports/migrations/0001_initial.py index d0fe60f62c..4b3a1e3932 100644 --- a/src/etools/applications/reports/migrations/0001_initial.py +++ b/src/etools/applications/reports/migrations/0001_initial.py @@ -1,11 +1,11 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 +import django.core.validators +from django.db import migrations, models import django.db.models.deletion import django.utils.timezone -from django.db import migrations, models - +import etools.applications.reports.models import model_utils.fields -import mptt.fields class Migration(migrations.Migration): @@ -13,9 +13,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('partners', '0001_initial'), ] operations = [ @@ -23,25 +20,28 @@ class Migration(migrations.Migration): name='AppliedIndicator', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('cluster_indicator_id', models.PositiveIntegerField( - blank=True, null=True, verbose_name='Cluster Indicator ID')), - ('response_plan_name', models.CharField(blank=True, - max_length=1024, null=True, verbose_name='Response plan name')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('measurement_specifications', models.TextField(blank=True, max_length=4048, null=True)), + ('label', models.TextField(blank=True, max_length=4048, null=True)), + ('numerator_label', models.CharField(blank=True, max_length=256, null=True)), + ('denominator_label', models.CharField(blank=True, max_length=256, null=True)), + ('cluster_indicator_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='Cluster Indicator ID')), + ('response_plan_name', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Response plan name')), ('cluster_name', models.CharField(blank=True, max_length=512, null=True, verbose_name='Cluster Name')), - ('cluster_indicator_title', models.CharField(blank=True, - max_length=1024, null=True, verbose_name='Cluster Indicator Title')), + ('cluster_indicator_title', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Cluster Indicator Title')), ('context_code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code in current context')), - ('target', models.PositiveIntegerField(default=0, verbose_name='Target')), - ('baseline', models.PositiveIntegerField(blank=True, null=True, verbose_name='Baseline')), + ('target', models.JSONField(default=etools.applications.reports.models.indicator_default_dict)), + ('baseline', models.JSONField(default=etools.applications.reports.models.indicator_default_dict, null=True)), ('assumptions', models.TextField(blank=True, null=True, verbose_name='Assumptions')), - ('means_of_verification', models.CharField(blank=True, - max_length=255, null=True, verbose_name='Means of Verification')), + ('means_of_verification', models.CharField(blank=True, max_length=255, null=True, verbose_name='Means of Verification')), ('total', models.IntegerField(blank=True, default=0, null=True, verbose_name='Current Total')), + ('is_high_frequency', models.BooleanField(default=False)), + ('is_active', models.BooleanField(default=True)), ], + options={ + 'ordering': ('created',), + }, ), migrations.CreateModel( name='CountryProgramme', @@ -58,10 +58,8 @@ class Migration(migrations.Migration): name='Disaggregation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=255, unique=True, verbose_name='Name')), ('active', models.BooleanField(default=False, verbose_name='Active')), ], @@ -73,14 +71,10 @@ class Migration(migrations.Migration): name='DisaggregationValue', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('value', models.CharField(max_length=15, verbose_name='Value')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('value', models.CharField(max_length=20, verbose_name='Value')), ('active', models.BooleanField(default=False, verbose_name='Active')), - ('disaggregation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='disaggregation_values', to='reports.Disaggregation', verbose_name='Disaggregation')), ], options={ 'abstract': False, @@ -90,10 +84,8 @@ class Migration(migrations.Migration): name='Indicator', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=1024, verbose_name='Name')), ('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code')), ('total', models.IntegerField(blank=True, null=True, verbose_name='UNICEF Target')), @@ -115,56 +107,124 @@ class Migration(migrations.Migration): name='IndicatorBlueprint', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('title', models.CharField(max_length=1024, verbose_name='Title')), - ('unit', models.CharField(choices=[('number', 'number'), ('percentage', - 'percentage')], default='number', max_length=10, verbose_name='Unit')), + ('unit', models.CharField(choices=[('number', 'number'), ('percentage', 'percentage')], default='number', max_length=10, verbose_name='Unit')), ('description', models.CharField(blank=True, max_length=3072, null=True, verbose_name='Description')), ('code', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='Code')), ('subdomain', models.CharField(blank=True, max_length=255, null=True, verbose_name='Subdomain')), ('disaggregatable', models.BooleanField(default=False, verbose_name='Disaggregatable')), - ('calculation_formula_across_periods', models.CharField(choices=[('sum', 'sum'), ('max', 'max'), ('avg', 'avg'), ( - 'percentage', 'percentage'), ('ratio', 'ratio')], default='sum', max_length=10, verbose_name='Calculation Formula across Periods')), - ('calculation_formula_across_locations', models.CharField(choices=[('sum', 'sum'), ('max', 'max'), ('avg', 'avg'), ( - 'percentage', 'percentage'), ('ratio', 'ratio')], default='sum', max_length=10, verbose_name='Calculation Formula across Locations')), - ('display_type', models.CharField(choices=[('number', 'number'), ('percentage', 'percentage'), ( - 'ratio', 'ratio')], default='number', max_length=10, verbose_name='Display Type')), + ('calculation_formula_across_periods', models.CharField(choices=[('sum', 'sum'), ('max', 'max'), ('avg', 'avg'), ('percentage', 'percentage'), ('ratio', 'ratio')], default='sum', max_length=10, verbose_name='Calculation Formula across Periods')), + ('calculation_formula_across_locations', models.CharField(choices=[('sum', 'sum'), ('max', 'max'), ('avg', 'avg'), ('percentage', 'percentage'), ('ratio', 'ratio')], default='sum', max_length=10, verbose_name='Calculation Formula across Locations')), + ('display_type', models.CharField(choices=[('number', 'number'), ('percentage', 'percentage'), ('ratio', 'ratio')], default='number', max_length=10, verbose_name='Display Type')), ], options={ 'ordering': ['-id'], }, ), + migrations.CreateModel( + name='InterventionActivity', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('name', models.CharField(max_length=150, verbose_name='Name')), + ('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code')), + ('context_details', models.TextField(blank=True, null=True, verbose_name='Context Details')), + ('unicef_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash')), + ('cso_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash')), + ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), + ], + options={ + 'verbose_name': 'Intervention Activity', + 'verbose_name_plural': 'Intervention Activities', + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='InterventionActivityItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code')), + ('name', models.CharField(max_length=150, verbose_name='Name')), + ('unit', models.CharField(max_length=150, verbose_name='Unit')), + ('unit_price', models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Unit Price')), + ('no_units', models.DecimalField(decimal_places=2, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number')), + ('unicef_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash')), + ('cso_cash', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash')), + ], + options={ + 'verbose_name': 'Intervention Activity Item', + 'verbose_name_plural': 'Intervention Activity Items', + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='InterventionTimeFrame', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('quarter', models.PositiveSmallIntegerField()), + ('start_date', models.DateField(verbose_name='Start Date')), + ('end_date', models.DateField(verbose_name='End Date')), + ], + options={ + 'ordering': ('intervention', 'start_date'), + }, + ), migrations.CreateModel( name='LowerResult', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('name', models.CharField(max_length=500, verbose_name='Name')), - ('code', models.CharField(max_length=50, verbose_name='Code')), - ('result_link', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='ll_results', to='partners.InterventionResultLink', verbose_name='Result Link')), + ('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='Code')), + ('is_active', models.BooleanField(default=True)), + ], + options={ + 'ordering': ('created',), + }, + ), + migrations.CreateModel( + name='Office', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=254, verbose_name='Name')), ], options={ - 'ordering': ('-created',), + 'ordering': ('name',), }, ), migrations.CreateModel( name='Quarter', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(choices=[('Q1', 'Quarter 1'), ('Q2', 'Quarter 2'), - ('Q3', 'Quarter 3'), ('Q4', 'Quarter 4')], max_length=64, verbose_name='Name')), + ('name', models.CharField(choices=[('Q1', 'Quarter 1'), ('Q2', 'Quarter 2'), ('Q3', 'Quarter 3'), ('Q4', 'Quarter 4')], max_length=64, verbose_name='Name')), ('year', models.CharField(max_length=4, verbose_name='Year')), ('start_date', models.DateTimeField(verbose_name='Start Date')), ('end_date', models.DateTimeField(verbose_name='End Date')), ], ), + migrations.CreateModel( + name='ReportingRequirement', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('start_date', models.DateField(null=True, verbose_name='Start Date')), + ('end_date', models.DateField(null=True, verbose_name='End Date')), + ('due_date', models.DateField(verbose_name='Due Date')), + ('report_type', models.CharField(choices=[('QPR', 'Standard Quarterly Progress Report'), ('HR', 'Humanitarian Report')], max_length=50)), + ], + options={ + 'ordering': ('-end_date',), + }, + ), migrations.CreateModel( name='Result', fields=[ @@ -174,30 +234,26 @@ class Migration(migrations.Migration): ('from_date', models.DateField(blank=True, null=True, verbose_name='From Date')), ('to_date', models.DateField(blank=True, null=True, verbose_name='To Date')), ('humanitarian_tag', models.BooleanField(default=False, verbose_name='Humanitarian Tag')), + ('humanitarian_marker_code', models.CharField(blank=True, max_length=255, null=True, verbose_name='Humanitarian Marker Code')), + ('humanitarian_marker_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Humanitarian Marker Name')), ('wbs', models.CharField(blank=True, max_length=50, null=True, verbose_name='WBS')), ('vision_id', models.CharField(blank=True, max_length=10, null=True, verbose_name='VISION ID')), + ('programme_area_code', models.CharField(blank=True, max_length=16, null=True, verbose_name='Programme Area Code')), + ('programme_area_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Programme Area Name')), ('gic_code', models.CharField(blank=True, max_length=8, null=True, verbose_name='GIC Code')), ('gic_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='GIC Name')), ('sic_code', models.CharField(blank=True, max_length=8, null=True, verbose_name='SIC Code')), ('sic_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='SIC Name')), - ('activity_focus_code', models.CharField(blank=True, - max_length=8, null=True, verbose_name='Activity Focus Code')), - ('activity_focus_name', models.CharField(blank=True, - max_length=255, null=True, verbose_name='Activity Focus Code')), + ('activity_focus_code', models.CharField(blank=True, max_length=8, null=True, verbose_name='Activity Focus Code')), + ('activity_focus_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Activity Focus Code')), ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), ('ram', models.BooleanField(default=False, verbose_name='RAM')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('lft', models.PositiveIntegerField(db_index=True, editable=False)), - ('rght', models.PositiveIntegerField(db_index=True, editable=False)), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), - ('level', models.PositiveIntegerField(db_index=True, editable=False)), - ('country_programme', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.CountryProgramme', verbose_name='Country Programme')), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='children', to='reports.Result', verbose_name='Parent')), + ('level', models.PositiveIntegerField(editable=False)), ], options={ 'ordering': ['name'], @@ -207,29 +263,41 @@ class Migration(migrations.Migration): name='ResultType', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(choices=[('Outcome', 'Outcome'), ('Output', 'Output'), - ('Activity', 'Activity')], max_length=150, unique=True, verbose_name='Name')), + ('name', models.CharField(choices=[('Outcome', 'Outcome'), ('Output', 'Output'), ('Activity', 'Activity')], max_length=150, unique=True, verbose_name='Name')), ], ), migrations.CreateModel( name='Section', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=45, unique=True, verbose_name='Name')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), ('description', models.CharField(blank=True, max_length=256, null=True, verbose_name='Description')), ('alternate_id', models.IntegerField(blank=True, null=True, verbose_name='Alternate ID')), - ('alternate_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Alternate Name')), + ('alternate_name', models.CharField(default='', max_length=255, null=True, verbose_name='Alternate Name')), ('dashboard', models.BooleanField(default=False, verbose_name='Dashboard')), ('color', models.CharField(blank=True, max_length=7, null=True, verbose_name='Color')), + ('active', models.BooleanField(default=True, verbose_name='Active')), ], options={ + 'db_table': 'reports_sector', 'ordering': ['name'], }, ), + migrations.CreateModel( + name='SpecialReportingRequirement', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')), + ('due_date', models.DateField(verbose_name='Due Date')), + ], + options={ + 'ordering': ('-due_date',), + }, + ), migrations.CreateModel( name='Unit', fields=[ @@ -240,80 +308,11 @@ class Migration(migrations.Migration): 'ordering': ['type'], }, ), - migrations.AddField( - model_name='result', - name='result_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='reports.ResultType', verbose_name='Result Type'), - ), - migrations.AddField( - model_name='result', - name='sector', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Section', verbose_name='Section'), - ), - migrations.AddField( - model_name='indicator', - name='result', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Result', verbose_name='Result'), - ), - migrations.AddField( - model_name='indicator', - name='sector', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Section', verbose_name='Section'), - ), - migrations.AddField( - model_name='indicator', - name='unit', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Unit', verbose_name='Unit'), - ), - migrations.AddField( - model_name='appliedindicator', - name='disaggregation', - field=models.ManyToManyField(blank=True, related_name='applied_indicators', - to='reports.Disaggregation', verbose_name='Disaggregation Logic'), - ), - migrations.AddField( - model_name='appliedindicator', - name='indicator', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.IndicatorBlueprint', verbose_name='Indicator'), - ), - migrations.AddField( - model_name='appliedindicator', - name='locations', - field=models.ManyToManyField(related_name='applied_indicators', - to='locations.Location', verbose_name='Location'), - ), - migrations.AddField( - model_name='appliedindicator', - name='lower_result', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='applied_indicators', to='reports.LowerResult', verbose_name='PD Result'), - ), - migrations.AddField( - model_name='appliedindicator', - name='section', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='reports.Section', verbose_name='Section'), - ), - migrations.AlterUniqueTogether( - name='result', - unique_together=set([('wbs', 'country_programme')]), - ), - migrations.AlterUniqueTogether( - name='lowerresult', - unique_together=set([('result_link', 'code')]), - ), - migrations.AlterUniqueTogether( - name='indicator', - unique_together=set([('name', 'result', 'sector')]), - ), - migrations.AlterUniqueTogether( - name='appliedindicator', - unique_together=set([('indicator', 'lower_result')]), + migrations.CreateModel( + name='UserTenantProfile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.office', verbose_name='Office')), + ], ), ] diff --git a/src/etools/applications/reports/migrations/0002_fix_null_values.py b/src/etools/applications/reports/migrations/0002_fix_null_values.py deleted file mode 100644 index 5668e0d254..0000000000 --- a/src/etools/applications/reports/migrations/0002_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0001_initial'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0002_initial.py b/src/etools/applications/reports/migrations/0002_initial.py new file mode 100644 index 0000000000..c08462d364 --- /dev/null +++ b/src/etools/applications/reports/migrations/0002_initial.py @@ -0,0 +1,141 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0002_initial'), + ('users', '0001_initial'), + ('locations', '0001_initial'), + ('reports', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='usertenantprofile', + name='profile', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='tenant_profile', to='users.userprofile', verbose_name='Profile'), + ), + migrations.AddField( + model_name='specialreportingrequirement', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='special_reporting_requirements', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='result', + name='country_programme', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.countryprogramme', verbose_name='Country Programme'), + ), + migrations.AddField( + model_name='result', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='reports.result', verbose_name='Parent'), + ), + migrations.AddField( + model_name='result', + name='result_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='reports.resulttype', verbose_name='Result Type'), + ), + migrations.AddField( + model_name='result', + name='sector', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.section', verbose_name='Section'), + ), + migrations.AddField( + model_name='reportingrequirement', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reporting_requirements', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='lowerresult', + name='result_link', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ll_results', to='partners.interventionresultlink', verbose_name='Result Link'), + ), + migrations.AddField( + model_name='interventiontimeframe', + name='intervention', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quarters', to='partners.intervention', verbose_name='Intervention'), + ), + migrations.AddField( + model_name='interventionactivityitem', + name='activity', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='reports.interventionactivity', verbose_name='Activity'), + ), + migrations.AddField( + model_name='interventionactivity', + name='result', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='reports.lowerresult', verbose_name='Result'), + ), + migrations.AddField( + model_name='interventionactivity', + name='time_frames', + field=models.ManyToManyField(blank=True, related_name='activities', to='reports.InterventionTimeFrame', verbose_name='Time Frames Enabled'), + ), + migrations.AddField( + model_name='indicator', + name='result', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.result', verbose_name='Result'), + ), + migrations.AddField( + model_name='indicator', + name='sector', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.section', verbose_name='Section'), + ), + migrations.AddField( + model_name='indicator', + name='unit', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.unit', verbose_name='Unit'), + ), + migrations.AddField( + model_name='disaggregationvalue', + name='disaggregation', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disaggregation_values', to='reports.disaggregation', verbose_name='Disaggregation'), + ), + migrations.AddField( + model_name='appliedindicator', + name='disaggregation', + field=models.ManyToManyField(blank=True, related_name='applied_indicators', to='reports.Disaggregation', verbose_name='Disaggregation Logic'), + ), + migrations.AddField( + model_name='appliedindicator', + name='indicator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.indicatorblueprint', verbose_name='Indicator'), + ), + migrations.AddField( + model_name='appliedindicator', + name='locations', + field=models.ManyToManyField(related_name='applied_indicators', to='locations.Location', verbose_name='Location'), + ), + migrations.AddField( + model_name='appliedindicator', + name='lower_result', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='applied_indicators', to='reports.lowerresult', verbose_name='PD Result'), + ), + migrations.AddField( + model_name='appliedindicator', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.section', verbose_name='Section'), + ), + migrations.AlterUniqueTogether( + name='result', + unique_together={('wbs', 'country_programme')}, + ), + migrations.AlterUniqueTogether( + name='lowerresult', + unique_together={('result_link', 'code')}, + ), + migrations.AlterUniqueTogether( + name='indicator', + unique_together={('name', 'result', 'sector')}, + ), + migrations.AlterUniqueTogether( + name='appliedindicator', + unique_together={('indicator', 'lower_result')}, + ), + ] diff --git a/src/etools/applications/reports/migrations/0003_make_not_nullable.py b/src/etools/applications/reports/migrations/0003_make_not_nullable.py deleted file mode 100644 index 08a0a80550..0000000000 --- a/src/etools/applications/reports/migrations/0003_make_not_nullable.py +++ /dev/null @@ -1,128 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0002_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='appliedindicator', - name='assumptions', - field=models.TextField(blank=True, default='', verbose_name='Assumptions'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='cluster_indicator_title', - field=models.CharField(blank=True, default='', max_length=1024, verbose_name='Cluster Indicator Title'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='cluster_name', - field=models.CharField(blank=True, default='', max_length=512, verbose_name='Cluster Name'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='context_code', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Code in current context'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='means_of_verification', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Means of Verification'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='response_plan_name', - field=models.CharField(blank=True, default='', max_length=1024, verbose_name='Response plan name'), - ), - migrations.AlterField( - model_name='indicator', - name='assumptions', - field=models.TextField(blank=True, default='', verbose_name='Assumptions'), - ), - migrations.AlterField( - model_name='indicator', - name='baseline', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Baseline'), - ), - migrations.AlterField( - model_name='indicator', - name='code', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Code'), - ), - migrations.AlterField( - model_name='indicator', - name='target', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Target'), - ), - migrations.AlterField( - model_name='indicatorblueprint', - name='description', - field=models.CharField(blank=True, default='', max_length=3072, verbose_name='Description'), - ), - migrations.AlterField( - model_name='indicatorblueprint', - name='subdomain', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Subdomain'), - ), - migrations.AlterField( - model_name='result', - name='activity_focus_code', - field=models.CharField(blank=True, default='', max_length=8, verbose_name='Activity Focus Code'), - ), - migrations.AlterField( - model_name='result', - name='activity_focus_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Activity Focus Code'), - ), - migrations.AlterField( - model_name='result', - name='code', - field=models.CharField(blank=True, default='', max_length=50, verbose_name='Code'), - ), - migrations.AlterField( - model_name='result', - name='gic_code', - field=models.CharField(blank=True, default='', max_length=8, verbose_name='GIC Code'), - ), - migrations.AlterField( - model_name='result', - name='gic_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='GIC Name'), - ), - migrations.AlterField( - model_name='result', - name='sic_code', - field=models.CharField(blank=True, default='', max_length=8, verbose_name='SIC Code'), - ), - migrations.AlterField( - model_name='result', - name='sic_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='SIC Name'), - ), - migrations.AlterField( - model_name='result', - name='vision_id', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='VISION ID'), - ), - migrations.AlterField( - model_name='section', - name='alternate_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Alternate Name'), - ), - migrations.AlterField( - model_name='section', - name='color', - field=models.CharField(blank=True, default='', max_length=7, verbose_name='Color'), - ), - migrations.AlterField( - model_name='section', - name='description', - field=models.CharField(blank=True, default='', max_length=256, verbose_name='Description'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0004_auto_20180403_1309.py b/src/etools/applications/reports/migrations/0004_auto_20180403_1309.py deleted file mode 100644 index aebde172a3..0000000000 --- a/src/etools/applications/reports/migrations/0004_auto_20180403_1309.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-03 13:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0003_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='appliedindicator', - name='is_active', - field=models.BooleanField(default=True), - ), - migrations.AddField( - model_name='appliedindicator', - name='is_high_frequency', - field=models.BooleanField(default=False), - ), - ] diff --git a/src/etools/applications/reports/migrations/0005_reportingrequirement.py b/src/etools/applications/reports/migrations/0005_reportingrequirement.py deleted file mode 100644 index 65541a4145..0000000000 --- a/src/etools/applications/reports/migrations/0005_reportingrequirement.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-05 09:52 - -import django.db.models.deletion -import django.utils.timezone -from django.db import migrations, models - -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0005_make_not_nullable'), - ('reports', '0004_auto_20180403_1309'), - ] - - operations = [ - migrations.CreateModel( - name='ReportingRequirement', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('start_date', models.DateField(null=True, verbose_name='Start Date')), - ('end_date', models.DateField(null=True, verbose_name='End Date')), - ('due_date', models.DateField(verbose_name='Due Date')), - ('report_type', models.CharField(choices=[('QPR', 'Standard Quarterly Progress Report'), ( - 'HR', 'Humanitarian Report'), ('SPECIAL', 'Special/Ad hoc Report')], max_length=50)), - ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='reporting_requirements', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'ordering': ('-end_date',), - }, - ), - ] diff --git a/src/etools/applications/reports/migrations/0006_auto_20180423_1757.py b/src/etools/applications/reports/migrations/0006_auto_20180423_1757.py deleted file mode 100644 index c47a4315ca..0000000000 --- a/src/etools/applications/reports/migrations/0006_auto_20180423_1757.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-23 17:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0005_reportingrequirement'), - ] - - operations = [ - migrations.AlterField( - model_name='appliedindicator', - name='means_of_verification', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Means of Verification'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0007_auto_20180424_1845.py b/src/etools/applications/reports/migrations/0007_auto_20180424_1845.py deleted file mode 100644 index 845bb702ac..0000000000 --- a/src/etools/applications/reports/migrations/0007_auto_20180424_1845.py +++ /dev/null @@ -1,123 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-24 18:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0006_auto_20180423_1757'), - ] - - operations = [ - migrations.AlterField( - model_name='appliedindicator', - name='assumptions', - field=models.TextField(blank=True, null=True, verbose_name='Assumptions'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='cluster_indicator_title', - field=models.CharField(blank=True, max_length=1024, null=True, verbose_name='Cluster Indicator Title'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='cluster_name', - field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Cluster Name'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='context_code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code in current context'), - ), - migrations.AlterField( - model_name='appliedindicator', - name='response_plan_name', - field=models.CharField(blank=True, max_length=1024, null=True, verbose_name='Response plan name'), - ), - migrations.AlterField( - model_name='indicator', - name='assumptions', - field=models.TextField(blank=True, null=True, verbose_name='Assumptions'), - ), - migrations.AlterField( - model_name='indicator', - name='baseline', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Baseline'), - ), - migrations.AlterField( - model_name='indicator', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - migrations.AlterField( - model_name='indicator', - name='target', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Target'), - ), - migrations.AlterField( - model_name='indicatorblueprint', - name='description', - field=models.CharField(blank=True, max_length=3072, null=True, verbose_name='Description'), - ), - migrations.AlterField( - model_name='indicatorblueprint', - name='subdomain', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Subdomain'), - ), - migrations.AlterField( - model_name='result', - name='activity_focus_code', - field=models.CharField(blank=True, max_length=8, null=True, verbose_name='Activity Focus Code'), - ), - migrations.AlterField( - model_name='result', - name='activity_focus_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Activity Focus Code'), - ), - migrations.AlterField( - model_name='result', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - migrations.AlterField( - model_name='result', - name='gic_code', - field=models.CharField(blank=True, max_length=8, null=True, verbose_name='GIC Code'), - ), - migrations.AlterField( - model_name='result', - name='gic_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='GIC Name'), - ), - migrations.AlterField( - model_name='result', - name='sic_code', - field=models.CharField(blank=True, max_length=8, null=True, verbose_name='SIC Code'), - ), - migrations.AlterField( - model_name='result', - name='sic_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='SIC Name'), - ), - migrations.AlterField( - model_name='result', - name='vision_id', - field=models.CharField(blank=True, max_length=10, null=True, verbose_name='VISION ID'), - ), - migrations.AlterField( - model_name='section', - name='alternate_name', - field=models.CharField(default='', max_length=255, null=True, verbose_name='Alternate Name'), - ), - migrations.AlterField( - model_name='section', - name='color', - field=models.CharField(blank=True, max_length=7, null=True, verbose_name='Color'), - ), - migrations.AlterField( - model_name='section', - name='description', - field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Description'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0008_auto_20180515_1744.py b/src/etools/applications/reports/migrations/0008_auto_20180515_1744.py deleted file mode 100644 index 5035557371..0000000000 --- a/src/etools/applications/reports/migrations/0008_auto_20180515_1744.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-15 17:44 -import django.db.models.deletion -import django.utils.timezone -from django.db import migrations, models - -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0009_auto_20180510_1940'), - ('reports', '0007_auto_20180424_1845'), - ] - - operations = [ - migrations.CreateModel( - name='SpecialReportingRequirement', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')), - ('due_date', models.DateField(verbose_name='Due Date')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='special_reporting_requirements', to='partners.Intervention', verbose_name='Intervention')), - ], - options={ - 'ordering': ('-due_date',), - }, - ), - migrations.RemoveField( - model_name='reportingrequirement', - name='description', - ), - migrations.AlterField( - model_name='reportingrequirement', - name='report_type', - field=models.CharField(choices=[('QPR', 'Standard Quarterly Progress Report'), ('HR', 'Humanitarian Report')], max_length=50), - ), - ] diff --git a/src/etools/applications/reports/migrations/0009_auto_20180606_1807.py b/src/etools/applications/reports/migrations/0009_auto_20180606_1807.py deleted file mode 100644 index 81c7ea4034..0000000000 --- a/src/etools/applications/reports/migrations/0009_auto_20180606_1807.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 1.10.8 on 2018-06-06 18:07 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0008_auto_20180515_1744'), - ] - - operations = [ - migrations.AddField( - model_name='appliedindicator', - name='baseline_new', - field=models.JSONField(default={'d': 1, 'v': 0}), - ), - migrations.AddField( - model_name='appliedindicator', - name='denominator_label', - field=models.CharField(blank=True, max_length=256, null=True), - ), - migrations.AddField( - model_name='appliedindicator', - name='label', - field=models.TextField(blank=True, max_length=4048, null=True), - ), - migrations.AddField( - model_name='appliedindicator', - name='measurement_specifications', - field=models.TextField(blank=True, max_length=4048, null=True), - ), - migrations.AddField( - model_name='appliedindicator', - name='numerator_label', - field=models.CharField(blank=True, max_length=256, null=True), - ), - migrations.AddField( - model_name='appliedindicator', - name='target_new', - field=models.JSONField(default={'d': 1, 'v': 0}), - ), - ] diff --git a/src/etools/applications/reports/migrations/0010_migrate_targets.py b/src/etools/applications/reports/migrations/0010_migrate_targets.py deleted file mode 100644 index a413635fc3..0000000000 --- a/src/etools/applications/reports/migrations/0010_migrate_targets.py +++ /dev/null @@ -1,36 +0,0 @@ -from django.db import migrations, models - - -def update_targets(apps, schema_editor): - AppliedIndicator = apps.get_model("reports", "AppliedIndicator") - ais = AppliedIndicator.objects.prefetch_related('indicator').all() - - for ai in ais: - ai.target_new['v'] = ai.target - ai.baseline_new['v'] = ai.baseline - if ai.indicator.unit != 'number': - ai.target_new['d'] = 100 - ai.baseline_new['d'] = 100 - - ai.save() - - -def reverse(apps, schema_editor): - AppliedIndicator = apps.get_model("reports", "AppliedIndicator") - ais = AppliedIndicator.objects.prefetch_related('indicator').all() - - for ai in ais: - ai.target = ai.target_new['v'] - ai.baseline = ai.baseline_new['v'] - ai.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0009_auto_20180606_1807'), - ] - - operations = [ - migrations.RunPython(update_targets, reverse_code=reverse) - ] diff --git a/src/etools/applications/reports/migrations/0011_auto_20180709_1326.py b/src/etools/applications/reports/migrations/0011_auto_20180709_1326.py deleted file mode 100644 index 605344c3b8..0000000000 --- a/src/etools/applications/reports/migrations/0011_auto_20180709_1326.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-09 13:26 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0010_migrate_targets'), - ] - - operations = [ - migrations.RemoveField( - model_name='appliedindicator', - name='baseline', - ), - migrations.RemoveField( - model_name='appliedindicator', - name='target', - ), - ] diff --git a/src/etools/applications/reports/migrations/0012_auto_20180709_1328.py b/src/etools/applications/reports/migrations/0012_auto_20180709_1328.py deleted file mode 100644 index bac47feb57..0000000000 --- a/src/etools/applications/reports/migrations/0012_auto_20180709_1328.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-09 13:28 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0011_auto_20180709_1326'), - ] - - operations = [ - migrations.RenameField( - model_name='appliedindicator', - old_name='baseline_new', - new_name='baseline', - ), - migrations.RenameField( - model_name='appliedindicator', - old_name='target_new', - new_name='target', - ), - ] diff --git a/src/etools/applications/reports/migrations/0013_auto_20180709_1348.py b/src/etools/applications/reports/migrations/0013_auto_20180709_1348.py deleted file mode 100644 index afcca2208d..0000000000 --- a/src/etools/applications/reports/migrations/0013_auto_20180709_1348.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-09 13:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0012_auto_20180709_1328'), - ] - - operations = [ - migrations.AlterField( - model_name='appliedindicator', - name='baseline', - field=models.JSONField(default={'d': 1, 'v': 0}, null=True), - ), - ] diff --git a/src/etools/applications/reports/migrations/0014_auto_20181229_0249.py b/src/etools/applications/reports/migrations/0014_auto_20181229_0249.py deleted file mode 100644 index e456eeadb8..0000000000 --- a/src/etools/applications/reports/migrations/0014_auto_20181229_0249.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 2.0.9 on 2018-12-29 02:49 - -from django.db import migrations, models - -import etools.applications.reports.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0013_auto_20180709_1348'), - ] - - operations = [ - migrations.AlterField( - model_name='appliedindicator', - name='baseline', - field=models.JSONField(default=etools.applications.reports.models.indicator_default_dict, null=True), - ), - migrations.AlterField( - model_name='appliedindicator', - name='target', - field=models.JSONField(default=etools.applications.reports.models.indicator_default_dict), - ), - ] diff --git a/src/etools/applications/reports/migrations/0015_auto_20190208_2042.py b/src/etools/applications/reports/migrations/0015_auto_20190208_2042.py deleted file mode 100644 index 76d2379802..0000000000 --- a/src/etools/applications/reports/migrations/0015_auto_20190208_2042.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.1.5 on 2019-02-08 20:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0014_auto_20181229_0249'), - ] - - operations = [ - migrations.AddField( - model_name='result', - name='humanitarian_marker_code', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Humanitarian Marker Code'), - ), - migrations.AddField( - model_name='result', - name='humanitarian_marker_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Humanitarian Marker Name'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0016_auto_20190412_1612.py b/src/etools/applications/reports/migrations/0016_auto_20190412_1612.py deleted file mode 100644 index c5a7a59356..0000000000 --- a/src/etools/applications/reports/migrations/0016_auto_20190412_1612.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.1.7 on 2019-04-12 16:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0015_auto_20190208_2042'), - ] - - operations = [ - migrations.AlterModelTable( - name='section', - table='reports_sector', - ), - ] diff --git a/src/etools/applications/reports/migrations/0017_auto_20190424_1509.py b/src/etools/applications/reports/migrations/0017_auto_20190424_1509.py deleted file mode 100644 index b7a6c8f15e..0000000000 --- a/src/etools/applications/reports/migrations/0017_auto_20190424_1509.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.1.8 on 2019-04-24 15:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0016_auto_20190412_1612'), - ] - - operations = [ - migrations.AlterField( - model_name='result', - name='level', - field=models.PositiveIntegerField(editable=False), - ), - migrations.AlterField( - model_name='result', - name='lft', - field=models.PositiveIntegerField(editable=False), - ), - migrations.AlterField( - model_name='result', - name='rght', - field=models.PositiveIntegerField(editable=False), - ), - ] diff --git a/src/etools/applications/reports/migrations/0018_section_active.py b/src/etools/applications/reports/migrations/0018_section_active.py deleted file mode 100644 index 57a677270d..0000000000 --- a/src/etools/applications/reports/migrations/0018_section_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-09 19:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0017_auto_20190424_1509'), - ] - - operations = [ - migrations.AddField( - model_name='section', - name='active', - field=models.BooleanField(default=True, verbose_name='Active'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0019_auto_20190816_1609.py b/src/etools/applications/reports/migrations/0019_auto_20190816_1609.py deleted file mode 100644 index 5f12f0a839..0000000000 --- a/src/etools/applications/reports/migrations/0019_auto_20190816_1609.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.2.4 on 2019-08-16 16:09 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0018_section_active'), - ] - - operations = [ - migrations.AlterModelOptions( - name='appliedindicator', - options={'ordering': ('created',)}, - ), - migrations.AlterModelOptions( - name='lowerresult', - options={'ordering': ('created',)}, - ), - ] diff --git a/src/etools/applications/reports/migrations/0020_office.py b/src/etools/applications/reports/migrations/0020_office.py deleted file mode 100644 index 46aca95b54..0000000000 --- a/src/etools/applications/reports/migrations/0020_office.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-11 12:00 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0013_auto_20191010_1621'), - ('reports', '0019_auto_20190816_1609'), - ] - - operations = [ - migrations.CreateModel( - name='Office', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=254, verbose_name='Name')), - ], - options={ - 'ordering': ('name',), - }, - ), - ] diff --git a/src/etools/applications/reports/migrations/0021_auto_20191011_1201.py b/src/etools/applications/reports/migrations/0021_auto_20191011_1201.py deleted file mode 100644 index 073a8093ca..0000000000 --- a/src/etools/applications/reports/migrations/0021_auto_20191011_1201.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-11 12:01 - -from django.db import connection, migrations - - -def copy_offices_data(apps, schema): - OfficeOld = apps.get_model("users", "office") - Office = apps.get_model("reports", "office") - Country = apps.get_model("users", "country") - if connection.tenant.schema_name != 'public': - country = Country.objects.get( - schema_name=connection.tenant.schema_name, - ) - for old in OfficeOld.objects.filter(offices=country): - Office.objects.create( - pk=old.pk, - name=old.name, - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0020_office'), - ] - - operations = [ - migrations.RunPython( - copy_offices_data, - reverse_code=migrations.RunPython.noop, - ), - ] diff --git a/src/etools/applications/reports/migrations/0022_userprofileoffice.py b/src/etools/applications/reports/migrations/0022_userprofileoffice.py deleted file mode 100644 index 7d3be9ba29..0000000000 --- a/src/etools/applications/reports/migrations/0022_userprofileoffice.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-14 15:46 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0013_auto_20191010_1621'), - ('reports', '0021_auto_20191011_1201'), - ] - - operations = [ - migrations.CreateModel( - name='UserTenantProfile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='reports.Office', verbose_name='Office')), - ('profile', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='tenant_profile', to='users.UserProfile', verbose_name='Profile')), - ], - ), - ] diff --git a/src/etools/applications/reports/migrations/0023_auto_20191014_1546.py b/src/etools/applications/reports/migrations/0023_auto_20191014_1546.py deleted file mode 100644 index 9636041696..0000000000 --- a/src/etools/applications/reports/migrations/0023_auto_20191014_1546.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-14 15:46 - -from django.db import connection, migrations - - -# def convert_tenant_profile_data(apps, schema): -# """For each UserProfile setup office relation in ProfileOffice -# for each country that UserProfile has available -# Use the connection to determine the current country -# """ -# if connection.tenant.schema_name not in ["test", "public"]: -# UserProfile = apps.get_model("users", "userprofile") -# UserTenantProfile = apps.get_model("reports", "usertenantprofile") -# Office = apps.get_model("reports", "office") -# Country = apps.get_model("users", "country") -# country = Country.objects.get( -# schema_name=connection.tenant.schema_name, -# ) -# for profile in UserProfile.objects.all(): -# if profile.office and country in profile.countries_available.all(): -# try: -# office = Office.objects.get(pk=profile.office.pk) -# except Office.DoesNotExist: -# # assume that office is from another schema -# pass -# else: -# UserTenantProfile.objects.create( -# profile=profile, -# office=office, -# ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0022_userprofileoffice'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0024_auto_20191122_1559.py b/src/etools/applications/reports/migrations/0024_auto_20191122_1559.py deleted file mode 100644 index 5ccf49473f..0000000000 --- a/src/etools/applications/reports/migrations/0024_auto_20191122_1559.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-22 15:59 - -from django.db import connection, migrations -from django.db.models import Max - - -def reset_office_seq(apps, schema_editor): - if connection.tenant.schema_name not in ["test", "public"]: - Office = apps.get_model("reports", "office") - qs = Office.objects.all().aggregate(max_id=Max("id")) - with connection.cursor() as cursor: - cursor.execute( - "select setval('reports_office_id_seq', %s, true)", - [qs["max_id"]] - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0023_auto_20191014_1546'), - ] - - operations = [ - migrations.RunPython( - reset_office_seq, - migrations.RunPython.noop - ), - ] diff --git a/src/etools/applications/reports/migrations/0025_auto_20191220_2022.py b/src/etools/applications/reports/migrations/0025_auto_20191220_2022.py deleted file mode 100644 index a56943593e..0000000000 --- a/src/etools/applications/reports/migrations/0025_auto_20191220_2022.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-12-20 20:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0024_auto_20191122_1559'), - ] - - operations = [ - migrations.AlterField( - model_name='section', - name='name', - field=models.CharField(max_length=128, unique=True, verbose_name='Name'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0026_auto_20210611_1403.py b/src/etools/applications/reports/migrations/0026_auto_20210611_1403.py deleted file mode 100644 index a71719e081..0000000000 --- a/src/etools/applications/reports/migrations/0026_auto_20210611_1403.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.17 on 2021-06-11 14:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0025_auto_20191220_2022'), - ] - - operations = [ - migrations.AlterField( - model_name='disaggregationvalue', - name='value', - field=models.CharField(max_length=20, verbose_name='Value'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0026_interventionactivity_interventionactivityitem_interventionactivitytimeframe.py b/src/etools/applications/reports/migrations/0026_interventionactivity_interventionactivityitem_interventionactivitytimeframe.py deleted file mode 100644 index 7368f82a45..0000000000 --- a/src/etools/applications/reports/migrations/0026_interventionactivity_interventionactivityitem_interventionactivitytimeframe.py +++ /dev/null @@ -1,70 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-24 08:53 - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0025_auto_20191220_2022'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionActivity', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=150, verbose_name='Name')), - ('context_details', models.TextField(verbose_name='Context Details')), - ('unicef_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Cash')), - ('cso_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Cash')), - ('unicef_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Supplies')), - ('cso_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Supplies')), - ('result', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='reports.LowerResult', verbose_name='Result')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionActivityTimeFrame', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('start_date', models.DateField(verbose_name='Start Date')), - ('end_date', models.DateField(verbose_name='End Date')), - ('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='time_frames', to='reports.InterventionActivity', verbose_name='Activity')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='InterventionActivityItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('name', models.CharField(max_length=150, verbose_name='Name')), - ('other_details', models.TextField(verbose_name='Context Details')), - ('unicef_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Cash')), - ('cso_cash', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Cash')), - ('unicef_suppies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='UNICEF Supplies')), - ('cso_supplies', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='CSO Supplies')), - ('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='reports.InterventionActivity', verbose_name='Activity')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AlterModelOptions( - name='interventionactivity', - options={'verbose_name': 'Intervention Activity', 'verbose_name_plural': 'Intervention Activities'}, - ), - ] diff --git a/src/etools/applications/reports/migrations/0027_auto_20200728_1339.py b/src/etools/applications/reports/migrations/0027_auto_20200728_1339.py deleted file mode 100644 index df617fc71d..0000000000 --- a/src/etools/applications/reports/migrations/0027_auto_20200728_1339.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.7 on 2020-07-28 13:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0026_interventionactivity_interventionactivityitem_interventionactivitytimeframe'), - ] - - operations = [ - migrations.RenameField( - model_name='interventionactivityitem', - old_name='unicef_suppies', - new_name='unicef_supplies', - ), - migrations.AlterField( - model_name='interventionactivityitem', - name='other_details', - field=models.TextField(blank=True, verbose_name='Context Details'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0027_auto_20210714_2147.py b/src/etools/applications/reports/migrations/0027_auto_20210714_2147.py deleted file mode 100644 index 1aae94aba7..0000000000 --- a/src/etools/applications/reports/migrations/0027_auto_20210714_2147.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.24 on 2021-07-14 21:47 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0026_auto_20210611_1403'), - ] - - operations = [ - migrations.AddField( - model_name='result', - name='programme_area_code', - field=models.CharField(blank=True, max_length=16, null=True, verbose_name='Programme Area Code'), - ), - migrations.AddField( - model_name='result', - name='programme_area_name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Programme Area Name'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0028_auto_20200807_1207.py b/src/etools/applications/reports/migrations/0028_auto_20200807_1207.py deleted file mode 100644 index 52ddd69b40..0000000000 --- a/src/etools/applications/reports/migrations/0028_auto_20200807_1207.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-07 12:07 - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('partners', '0051_auto_20200722_1257'), - ('reports', '0027_auto_20200728_1339'), - ] - - operations = [ - migrations.CreateModel( - name='InterventionTimeFrame', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('start_date', models.DateField(verbose_name='Start Date')), - ('end_date', models.DateField(verbose_name='End Date')), - ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quarters', to='partners.Intervention', verbose_name='Intervention')), - ('quarter', models.PositiveSmallIntegerField()), - ], - options={ - 'abstract': False, - }, - ), - migrations.DeleteModel( - name='InterventionActivityTimeFrame', - ), - migrations.AddField( - model_name='interventionactivity', - name='time_frames', - field=models.ManyToManyField(blank=True, to='reports.InterventionTimeFrame', verbose_name='Time Frames Enabled', related_name='activities',), - ), - migrations.AlterModelOptions( - name='interventiontimeframe', - options={'ordering': ('intervention', 'start_date')}, - ), - ] diff --git a/src/etools/applications/reports/migrations/0029_auto_20200807_1208.py b/src/etools/applications/reports/migrations/0029_auto_20200807_1208.py deleted file mode 100644 index 034cedf6ad..0000000000 --- a/src/etools/applications/reports/migrations/0029_auto_20200807_1208.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 2.2.7 on 2020-08-07 12:08 -from dateutil.relativedelta import relativedelta -from django.db import migrations - - -def get_quarters_range(start, end): - """first date included, last excluded for every period in range""" - if not start or not end: - return [] - - quarters = [] - while start < end: - period_end = min(start + relativedelta(months=3), end) - quarters.append((start, period_end)) - start = period_end - - return quarters - - -def create_time_frames(apps, schema_editor): - Intervention = apps.get_model('partners', 'Intervention') - InterventionTimeFrame = apps.get_model('reports', 'InterventionTimeFrame') - - for intervention in Intervention.objects.filter(start__isnull=False, end__isnull=False): - for i, quarter in enumerate(get_quarters_range(intervention.start, intervention.end)): - InterventionTimeFrame.objects.get_or_create( - intervention=intervention, quarter=i + 1, start_date=quarter[0], end_date=quarter[1] - ) - - -class Migration(migrations.Migration): - dependencies = [ - ('reports', '0028_auto_20200807_1207'), - ('partners', '0051_auto_20200722_1257'), - ] - - operations = [ - migrations.RunPython(create_time_frames, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/reports/migrations/0030_auto_20200918_1036.py b/src/etools/applications/reports/migrations/0030_auto_20200918_1036.py deleted file mode 100644 index 3896d3c99b..0000000000 --- a/src/etools/applications/reports/migrations/0030_auto_20200918_1036.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-18 10:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0029_auto_20200807_1208'), - ] - - operations = [ - migrations.RemoveField( - model_name='interventionactivity', - name='cso_supplies', - ), - migrations.RemoveField( - model_name='interventionactivity', - name='unicef_supplies', - ), - migrations.RemoveField( - model_name='interventionactivityitem', - name='cso_supplies', - ), - migrations.RemoveField( - model_name='interventionactivityitem', - name='other_details', - ), - migrations.RemoveField( - model_name='interventionactivityitem', - name='unicef_supplies', - ), - migrations.AlterField( - model_name='interventionactivity', - name='context_details', - field=models.TextField(blank=True, null=True, verbose_name='Context Details'), - ), - migrations.AlterField( - model_name='interventionactivity', - name='cso_cash', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash'), - ), - migrations.AlterField( - model_name='interventionactivity', - name='unicef_cash', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash'), - ), - migrations.AlterField( - model_name='interventionactivityitem', - name='cso_cash', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='CSO Cash'), - ), - migrations.AlterField( - model_name='interventionactivityitem', - name='unicef_cash', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='UNICEF Cash'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0031_auto_20200921_1330.py b/src/etools/applications/reports/migrations/0031_auto_20200921_1330.py deleted file mode 100644 index 85776f100d..0000000000 --- a/src/etools/applications/reports/migrations/0031_auto_20200921_1330.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-21 13:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0030_auto_20200918_1036'), - ] - - operations = [ - migrations.AlterField( - model_name='lowerresult', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0031_auto_20200923_0922.py b/src/etools/applications/reports/migrations/0031_auto_20200923_0922.py deleted file mode 100644 index eada12e8cf..0000000000 --- a/src/etools/applications/reports/migrations/0031_auto_20200923_0922.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-23 09:22 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0030_auto_20200918_1036'), - ] - - operations = [ - migrations.AlterModelOptions( - name='interventionactivity', - options={'ordering': ('id',), 'verbose_name': 'Intervention Activity', 'verbose_name_plural': 'Intervention Activities'}, - ), - migrations.AlterModelOptions( - name='interventionactivityitem', - options={'ordering': ('id',), 'verbose_name': 'Intervention Activity Item', 'verbose_name_plural': 'Intervention Activity Items'}, - ), - ] diff --git a/src/etools/applications/reports/migrations/0032_merge_20200923_1719.py b/src/etools/applications/reports/migrations/0032_merge_20200923_1719.py deleted file mode 100644 index c4d8810fb1..0000000000 --- a/src/etools/applications/reports/migrations/0032_merge_20200923_1719.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-23 17:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0031_auto_20200921_1330'), - ('reports', '0031_auto_20200923_0922'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0033_auto_20210520_1310.py b/src/etools/applications/reports/migrations/0033_auto_20210520_1310.py deleted file mode 100644 index bbadbb40d2..0000000000 --- a/src/etools/applications/reports/migrations/0033_auto_20210520_1310.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-20 13:10 -from decimal import Decimal - -from django.db import migrations, models -from django.db.models import F - - -def update_unit_fields(apps, schema_editor): - InterventionActivityItem = apps.get_model('reports', 'InterventionActivityItem') - InterventionActivityItem.objects.all().update( - unit=F('name'), - no_units=Decimal(1), - unit_price=F('unicef_cash') + F('cso_cash'), - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0032_merge_20200923_1719'), - ] - - operations = [ - migrations.AddField( - model_name='interventionactivityitem', - name='no_units', - field=models.IntegerField(default=0, verbose_name='Units Number'), - ), - migrations.AddField( - model_name='interventionactivityitem', - name='unit', - field=models.CharField(blank=True, max_length=150, verbose_name='Unit'), - ), - migrations.AddField( - model_name='interventionactivityitem', - name='unit_price', - field=models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Unit Price'), - ), - migrations.RunPython(update_unit_fields, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/reports/migrations/0034_auto_20210520_1353.py b/src/etools/applications/reports/migrations/0034_auto_20210520_1353.py deleted file mode 100644 index 8495ffe0fc..0000000000 --- a/src/etools/applications/reports/migrations/0034_auto_20210520_1353.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-20 13:53 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0033_auto_20210520_1310'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionactivityitem', - name='no_units', - field=models.IntegerField(validators=[django.core.validators.MinValueValidator(1)], verbose_name='Units Number'), - ), - migrations.AlterField( - model_name='interventionactivityitem', - name='unit', - field=models.CharField(max_length=150, verbose_name='Unit'), - ), - migrations.AlterField( - model_name='interventionactivityitem', - name='unit_price', - field=models.DecimalField(decimal_places=2, max_digits=20, verbose_name='Unit Price'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0035_auto_20210608_0915.py b/src/etools/applications/reports/migrations/0035_auto_20210608_0915.py deleted file mode 100644 index b5d3e648ec..0000000000 --- a/src/etools/applications/reports/migrations/0035_auto_20210608_0915.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-08 09:15 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0034_auto_20210520_1353'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionactivityitem', - name='no_units', - field=models.DecimalField(decimal_places=1, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0036_merge_20210714_2201.py b/src/etools/applications/reports/migrations/0036_merge_20210714_2201.py deleted file mode 100644 index 5f5ac2a33e..0000000000 --- a/src/etools/applications/reports/migrations/0036_merge_20210714_2201.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.24 on 2021-07-14 22:01 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0035_auto_20210608_0915'), - ('reports', '0026_auto_20210611_1403'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0037_merge_20210805_1609.py b/src/etools/applications/reports/migrations/0037_merge_20210805_1609.py deleted file mode 100644 index 1b7aafe29e..0000000000 --- a/src/etools/applications/reports/migrations/0037_merge_20210805_1609.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-05 16:09 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0027_auto_20210714_2147'), - ('reports', '0036_merge_20210714_2201'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0038_interventionactivity_code.py b/src/etools/applications/reports/migrations/0038_interventionactivity_code.py deleted file mode 100644 index d7693e5082..0000000000 --- a/src/etools/applications/reports/migrations/0038_interventionactivity_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-21 12:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0037_merge_20210805_1609'), - ] - - operations = [ - migrations.AddField( - model_name='interventionactivity', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0039_auto_20220222_1135.py b/src/etools/applications/reports/migrations/0039_auto_20220222_1135.py deleted file mode 100644 index 97a56b9916..0000000000 --- a/src/etools/applications/reports/migrations/0039_auto_20220222_1135.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-22 11:35 - -from django.db import migrations - - -def number_lower_results(apps, schema_editor): - LowerResult = apps.get_model('reports', 'LowerResult') - InterventionResultLink = apps.get_model('partners', 'InterventionResultLink') - for result_link in InterventionResultLink.objects.all(): - lower_results = result_link.ll_results.all() - lower_results.update(code=None) # reset codes to avoid IntegrityError collision caused by old data - for i, lower_result in enumerate(lower_results): - lower_result.code = '{0}.{1}'.format(result_link.code, str(i + 1)) - LowerResult.objects.bulk_update(lower_results, fields=['code']) - -def number_intervention_activities(apps, schema_editor): - InterventionActivity = apps.get_model('reports', 'InterventionActivity') - LowerResult = apps.get_model('reports', 'LowerResult') - for lower_result in LowerResult.objects.all(): - activities = lower_result.activities.all() - for i, activity in enumerate(activities): - activity.code = '{0}.{1}'.format(lower_result.code, str(i + 1)) - InterventionActivity.objects.bulk_update(activities, fields=['code']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0038_interventionactivity_code'), - ('partners', '0095_auto_20220222_1132'), - ] - - operations = [ - migrations.RunPython(number_lower_results, migrations.RunPython.noop), - migrations.RunPython(number_intervention_activities, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/reports/migrations/0040_interventionactivity_is_active.py b/src/etools/applications/reports/migrations/0040_interventionactivity_is_active.py deleted file mode 100644 index e5093f8dc4..0000000000 --- a/src/etools/applications/reports/migrations/0040_interventionactivity_is_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-02-23 12:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0039_auto_20220222_1135'), - ] - - operations = [ - migrations.AddField( - model_name='interventionactivity', - name='is_active', - field=models.BooleanField(default=True, verbose_name='Is Active'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0041_interventionactivityitem_code.py b/src/etools/applications/reports/migrations/0041_interventionactivityitem_code.py deleted file mode 100644 index 72b30bea28..0000000000 --- a/src/etools/applications/reports/migrations/0041_interventionactivityitem_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-08 11:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0040_interventionactivity_is_active'), - ] - - operations = [ - migrations.AddField( - model_name='interventionactivityitem', - name='code', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Code'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0042_auto_20220408_1104.py b/src/etools/applications/reports/migrations/0042_auto_20220408_1104.py deleted file mode 100644 index 9924cc9b13..0000000000 --- a/src/etools/applications/reports/migrations/0042_auto_20220408_1104.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-08 11:04 - -from django.db import migrations - - -def number_activity_items(apps, schema_editor): - InterventionActivityItem = apps.get_model('reports', 'InterventionActivityItem') - InterventionActivity = apps.get_model('reports', 'InterventionActivity') - for activity in InterventionActivity.objects.all(): - items = activity.items.all() - for i, item in enumerate(items): - item.code = '{0}.{1}'.format(activity.code, str(i + 1)) - InterventionActivityItem.objects.bulk_update(items, fields=['code']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0041_interventionactivityitem_code'), - ] - - operations = [ - migrations.RunPython(number_activity_items, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/reports/migrations/0043_alter_interventionactivityitem_no_units.py b/src/etools/applications/reports/migrations/0043_alter_interventionactivityitem_no_units.py deleted file mode 100644 index 518e598fad..0000000000 --- a/src/etools/applications/reports/migrations/0043_alter_interventionactivityitem_no_units.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-06 03:20 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0042_auto_20220408_1104'), - ] - - operations = [ - migrations.AlterField( - model_name='interventionactivityitem', - name='no_units', - field=models.DecimalField(decimal_places=2, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Units Number'), - ), - ] diff --git a/src/etools/applications/reports/migrations/0043_auto_20220510_0717.py b/src/etools/applications/reports/migrations/0043_auto_20220510_0717.py deleted file mode 100644 index 88e8d66007..0000000000 --- a/src/etools/applications/reports/migrations/0043_auto_20220510_0717.py +++ /dev/null @@ -1,47 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-10 07:17 - -from django.db import migrations - - -def number_lower_results(apps, schema_editor): - LowerResult = apps.get_model('reports', 'LowerResult') - InterventionResultLink = apps.get_model('partners', 'InterventionResultLink') - for result_link in InterventionResultLink.objects.all(): - lower_results = result_link.ll_results.all() - lower_results.update(code=None) # reset codes to avoid IntegrityError collision caused by old data - for i, lower_result in enumerate(lower_results): - lower_result.code = '{0}.{1}'.format(result_link.code, str(i + 1)) - LowerResult.objects.bulk_update(lower_results, fields=['code']) - -def number_intervention_activities(apps, schema_editor): - InterventionActivity = apps.get_model('reports', 'InterventionActivity') - LowerResult = apps.get_model('reports', 'LowerResult') - for lower_result in LowerResult.objects.all(): - activities = lower_result.activities.all() - for i, activity in enumerate(activities): - activity.code = '{0}.{1}'.format(lower_result.code, str(i + 1)) - InterventionActivity.objects.bulk_update(activities, fields=['code']) - - -def number_activity_items(apps, schema_editor): - InterventionActivityItem = apps.get_model('reports', 'InterventionActivityItem') - InterventionActivity = apps.get_model('reports', 'InterventionActivity') - for activity in InterventionActivity.objects.all(): - items = activity.items.all() - for i, item in enumerate(items): - item.code = '{0}.{1}'.format(activity.code, str(i + 1)) - InterventionActivityItem.objects.bulk_update(items, fields=['code']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0042_auto_20220408_1104'), - ('partners', '0102_auto_20220510_0711'), - ] - - operations = [ - migrations.RunPython(number_lower_results, migrations.RunPython.noop), - migrations.RunPython(number_intervention_activities, migrations.RunPython.noop), - migrations.RunPython(number_activity_items, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/reports/migrations/0044_merge_20220510_0742.py b/src/etools/applications/reports/migrations/0044_merge_20220510_0742.py deleted file mode 100644 index 5d0cef1b70..0000000000 --- a/src/etools/applications/reports/migrations/0044_merge_20220510_0742.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-10 07:42 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0043_alter_interventionactivityitem_no_units'), - ('reports', '0043_auto_20220510_0717'), - ] - - operations = [ - ] diff --git a/src/etools/applications/reports/migrations/0045_lowerresult_is_active.py b/src/etools/applications/reports/migrations/0045_lowerresult_is_active.py deleted file mode 100644 index ee725828a8..0000000000 --- a/src/etools/applications/reports/migrations/0045_lowerresult_is_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-26 07:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0044_merge_20220510_0742'), - ] - - operations = [ - migrations.AddField( - model_name='lowerresult', - name='is_active', - field=models.BooleanField(default=True), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0001_initial.py b/src/etools/applications/t2f/migrations/0001_initial.py index e0d1bce509..4de6a0d59f 100644 --- a/src/etools/applications/t2f/migrations/0001_initial.py +++ b/src/etools/applications/t2f/migrations/0001_initial.py @@ -1,12 +1,9 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import django.contrib.postgres.fields -import django.db.models.deletion -from django.conf import settings from django.db import migrations, models - +import django.db.models.deletion import django_fsm - import etools.applications.t2f.models @@ -15,122 +12,22 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('users', '0001_initial'), - ('reports', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('locations', '0001_initial'), - ('unicef_locations', '0001_initial'), - ('publics', '0001_initial'), + ('action_points', '0001_initial'), ('partners', '0001_initial'), + ('locations', '0001_initial'), ] operations = [ - migrations.CreateModel( - name='ActionPoint', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('description', models.CharField(max_length=254, verbose_name='Description')), - ('due_date', models.DateTimeField(verbose_name='Due Date')), - ('status', models.CharField(blank=True, choices=[('open', 'Open'), ('ongoing', 'Ongoing'), ( - 'completed', 'Completed'), ('cancelled', 'Cancelled')], max_length=254, null=True, verbose_name='Status')), - ('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='Completed At')), - ('actions_taken', models.TextField(blank=True, null=True, verbose_name='Actions Taken')), - ('follow_up', models.BooleanField(default=False, verbose_name='Follow up')), - ('comments', models.TextField(blank=True, null=True, verbose_name='Comments')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('assigned_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Assigned By')), - ('person_responsible', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Responsible Person')), - ], - ), - migrations.CreateModel( - name='Clearances', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('medical_clearance', models.CharField(choices=[('requested', 'requested'), ('not_requested', 'not_requested'), ( - 'not_applicable', 'not_applicable')], default='not_applicable', max_length=14, verbose_name='Medical Clearance')), - ('security_clearance', models.CharField(choices=[('requested', 'requested'), ('not_requested', 'not_requested'), ( - 'not_applicable', 'not_applicable')], default='not_applicable', max_length=14, verbose_name='Security Clearance')), - ('security_course', models.CharField(choices=[('requested', 'requested'), ('not_requested', 'not_requested'), ( - 'not_applicable', 'not_applicable')], default='not_applicable', max_length=14, verbose_name='Security Course')), - ], - options={ - 'verbose_name_plural': 'Clearances', - }, - ), - migrations.CreateModel( - name='CostAssignment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('share', models.PositiveIntegerField(verbose_name='Share')), - ('delegate', models.BooleanField(default=False, verbose_name='Delegate')), - ('business_area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.BusinessArea', verbose_name='Business Area')), - ], - ), - migrations.CreateModel( - name='Deduction', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateField(verbose_name='Date')), - ('breakfast', models.BooleanField(default=False, verbose_name='Breakfast')), - ('lunch', models.BooleanField(default=False, verbose_name='Lunch')), - ('dinner', models.BooleanField(default=False, verbose_name='Dinner')), - ('accomodation', models.BooleanField(default=False, verbose_name='Accomodation')), - ('no_dsa', models.BooleanField(default=False, verbose_name='No DSA')), - ], - ), - migrations.CreateModel( - name='Expense', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('amount', models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='Amount')), - ('currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.Currency', verbose_name='Currency')), - ], - ), - migrations.CreateModel( - name='Invoice', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('reference_number', models.CharField(max_length=32, unique=True, verbose_name='Reference Number')), - ('business_area', models.CharField(max_length=32, verbose_name='Business Area')), - ('vendor_number', models.CharField(max_length=32, verbose_name='Vendor Number')), - ('amount', models.DecimalField(decimal_places=4, max_digits=20, verbose_name='Amount')), - ('status', models.CharField(choices=[('pending', 'Pending'), ('processing', 'Processing'), - ('success', 'Success'), ('error', 'Error')], max_length=16, verbose_name='Status')), - ('messages', django.contrib.postgres.fields.ArrayField(base_field=models.TextField( - blank=True, null=True), default=[], size=None, verbose_name='Messages')), - ('vision_fi_id', models.CharField(blank=True, max_length=16, null=True, verbose_name='Vision FI ID')), - ('currency', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.Currency', verbose_name='Currency')), - ], - ), - migrations.CreateModel( - name='InvoiceItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('amount', models.DecimalField(decimal_places=10, max_digits=20)), - ('invoice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='items', to='t2f.Invoice', verbose_name='Invoice')), - ], - ), migrations.CreateModel( name='ItineraryItem', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('origin', models.CharField(max_length=255, verbose_name='Origin')), ('destination', models.CharField(max_length=255, verbose_name='Destination')), - ('departure_date', models.DateTimeField(verbose_name='Departure Date')), - ('arrival_date', models.DateTimeField(verbose_name='Arrival Date')), + ('departure_date', models.DateField(verbose_name='Departure Date')), + ('arrival_date', models.DateField(verbose_name='Arrival Date')), ('overnight_travel', models.BooleanField(default=False, verbose_name='Overnight Travel')), - ('mode_of_travel', models.CharField(blank=True, choices=[('Plane', 'Plane'), ('Bus', 'Bus'), ('Car', 'Car'), ( - 'Boat', 'Boat'), ('Rail', 'Rail')], max_length=5, null=True, verbose_name='Mode of Travel')), - ('airlines', models.ManyToManyField(related_name='_itineraryitem_airlines_+', - to='publics.AirlineCompany', verbose_name='Airlines')), - ('dsa_region', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.DSARegion', verbose_name='DSA Region')), + ('mode_of_travel', models.CharField(blank=True, choices=[('Plane', 'Plane'), ('Bus', 'Bus'), ('Car', 'Car'), ('Boat', 'Boat'), ('Rail', 'Rail')], default='', max_length=5, verbose_name='Mode of Travel')), ], ), migrations.CreateModel( @@ -144,69 +41,42 @@ class Migration(migrations.Migration): ('first_submission_date', models.DateTimeField(blank=True, null=True, verbose_name='First Submission Date')), ('rejected_at', models.DateTimeField(blank=True, null=True, verbose_name='Rejected At')), ('approved_at', models.DateTimeField(blank=True, null=True, verbose_name='Approved At')), - ('rejection_note', models.TextField(blank=True, null=True, verbose_name='Rejection Note')), - ('cancellation_note', models.TextField(blank=True, null=True, verbose_name='Cancellation Note')), - ('certification_note', models.TextField(blank=True, null=True, verbose_name='Certification Note')), - ('report_note', models.TextField(blank=True, null=True, verbose_name='Report Note')), - ('misc_expenses', models.TextField(blank=True, null=True, verbose_name='Misc Expenses')), - ('status', django_fsm.FSMField(choices=[('planned', 'Planned'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('completed', 'Completed'), ('cancelled', 'Cancelled'), ('sent_for_payment', 'Sent for payment'), ('certification_submitted', - 'Certification submitted'), ('certification_approved', 'Certification approved'), ('certification_rejected', 'Certification rejected'), ('certified', 'Certified'), ('completed', 'Completed')], default='planned', max_length=50, protected=True, verbose_name='Status')), - ('start_date', models.DateTimeField(blank=True, null=True, verbose_name='Start Date')), - ('end_date', models.DateTimeField(blank=True, null=True, verbose_name='End Date')), - ('purpose', models.CharField(blank=True, max_length=500, null=True, verbose_name='Purpose')), - ('additional_note', models.TextField(blank=True, null=True, verbose_name='Additional Note')), - ('international_travel', models.BooleanField(default=False, verbose_name='International Travel', blank=True, null=True)), - ('ta_required', models.BooleanField(default=True, verbose_name='TA Required', blank=True, null=True)), - ('reference_number', models.CharField(default=etools.applications.t2f.models.make_travel_reference_number, - max_length=12, unique=True, verbose_name='Reference Number')), + ('rejection_note', models.TextField(blank=True, default='', verbose_name='Rejection Note')), + ('cancellation_note', models.TextField(blank=True, default='', verbose_name='Cancellation Note')), + ('certification_note', models.TextField(blank=True, default='', verbose_name='Certification Note')), + ('report_note', models.TextField(blank=True, default='', verbose_name='Report Note')), + ('misc_expenses', models.TextField(blank=True, default='', verbose_name='Misc Expenses')), + ('status', django_fsm.FSMField(choices=[('planned', 'Planned'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('completed', 'Completed'), ('cancelled', 'Cancelled'), ('completed', 'Completed')], default='planned', max_length=50, protected=True, verbose_name='Status')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), + ('purpose', models.CharField(blank=True, default='', max_length=500, verbose_name='Purpose')), + ('additional_note', models.TextField(blank=True, default='', verbose_name='Additional Note')), + ('international_travel', models.BooleanField(blank=True, default=False, null=True, verbose_name='International Travel')), + ('ta_required', models.BooleanField(blank=True, default=True, null=True, verbose_name='TA Required')), + ('reference_number', models.CharField(default=etools.applications.t2f.models.make_travel_reference_number, max_length=12, unique=True, verbose_name='Reference Number')), ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), - ('mode_of_travel', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('Plane', 'Plane'), ('Bus', 'Bus'), ( - 'Car', 'Car'), ('Boat', 'Boat'), ('Rail', 'Rail')], max_length=5), blank=True, null=True, size=None, verbose_name='Mode of Travel')), - ('estimated_travel_cost', models.DecimalField(decimal_places=4, - default=0, max_digits=20, verbose_name='Estimated Travel Cost')), + ('mode_of_travel', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('Plane', 'Plane'), ('Bus', 'Bus'), ('Car', 'Car'), ('Boat', 'Boat'), ('Rail', 'Rail')], max_length=5), blank=True, null=True, size=None, verbose_name='Mode of Travel')), + ('estimated_travel_cost', models.DecimalField(decimal_places=4, default=0, max_digits=20, verbose_name='Estimated Travel Cost')), ('is_driver', models.BooleanField(default=False, verbose_name='Is Driver')), - ('preserved_expenses_local', models.DecimalField(blank=True, decimal_places=4, - default=None, max_digits=20, null=True, verbose_name='Preserved Expenses (Local)')), - ('preserved_expenses_usd', models.DecimalField(blank=True, decimal_places=4, - default=None, max_digits=20, null=True, verbose_name='Preserved Expenses (USD)')), - ('approved_cost_traveler', models.DecimalField(blank=True, decimal_places=4, - default=None, max_digits=20, null=True, verbose_name='Approved Cost Traveler')), - ('approved_cost_travel_agencies', models.DecimalField(blank=True, decimal_places=4, - default=None, max_digits=20, null=True, verbose_name='Approved Cost Travel Agencies')), - ('currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.Currency', verbose_name='Currency')), - ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='users.Office', verbose_name='Office')), - ('sector', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='reports.Section', verbose_name='Section')), - ('supervisor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor')), - ('traveler', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='travels', to=settings.AUTH_USER_MODEL, verbose_name='Travellert')), + ('preserved_expenses_local', models.DecimalField(blank=True, decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Preserved Expenses (Local)')), + ('preserved_expenses_usd', models.DecimalField(blank=True, decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Preserved Expenses (USD)')), + ('approved_cost_traveler', models.DecimalField(blank=True, decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Approved Cost Traveler')), + ('approved_cost_travel_agencies', models.DecimalField(blank=True, decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Approved Cost Travel Agencies')), ], ), migrations.CreateModel( - name='TravelActivity', + name='T2FActionPoint', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('travel_type', models.CharField(blank=True, choices=[('Programmatic Visit', 'Programmatic Visit'), ('Spot Check', 'Spot Check'), ('Advocacy', 'Advocacy'), ('Technical Support', 'Technical Support'), ( - 'Meeting', 'Meeting'), ('Staff Development', 'Staff Development'), ('Staff Entitlement', 'Staff Entitlement')], max_length=64, null=True, verbose_name='Travel Type')), - ('date', models.DateTimeField(blank=True, null=True, verbose_name='Date')), - ('locations', models.ManyToManyField(related_name='_travelactivity_locations_+', - to='locations.Location', verbose_name='Locations')), - ('partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='partners.PartnerOrganization', verbose_name='Partner')), - ('partnership', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='travel_activities', to='partners.Intervention', verbose_name='Partnership')), - ('primary_traveler', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL, verbose_name='Primary Traveler')), - ('result', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='reports.Result', verbose_name='Result')), - ('travels', models.ManyToManyField(related_name='activities', to='t2f.Travel', verbose_name='Travels')), ], options={ - 'verbose_name_plural': 'Travel Activities', + 'verbose_name': 'T2F Action Point', + 'verbose_name_plural': 'T2F Action Points', + 'abstract': False, + 'proxy': True, + 'indexes': [], + 'constraints': [], }, + bases=('action_points.actionpoint',), ), migrations.CreateModel( name='TravelAttachment', @@ -214,62 +84,22 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('type', models.CharField(max_length=64, verbose_name='Type')), ('name', models.CharField(max_length=255, verbose_name='Name')), - ('file', models.FileField(max_length=255, - upload_to=etools.applications.t2f.models.determine_file_upload_path, verbose_name='File')), - ('travel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='attachments', to='t2f.Travel', verbose_name='Travel')), + ('file', models.FileField(blank=True, max_length=255, null=True, upload_to=etools.applications.t2f.models.determine_file_upload_path, verbose_name='File')), + ('travel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='t2f.travel', verbose_name='Travel')), ], ), - migrations.AddField( - model_name='itineraryitem', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='itinerary', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AddField( - model_name='invoice', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='invoices', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AddField( - model_name='expense', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='expenses', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AddField( - model_name='expense', - name='type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='+', to='publics.TravelExpenseType', verbose_name='Type'), - ), - migrations.AddField( - model_name='deduction', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='deductions', to='t2f.Travel', verbose_name='Deduction'), - ), - migrations.AddField( - model_name='costassignment', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='cost_assignments', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AddField( - model_name='clearances', - name='travel', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='clearances', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AddField( - model_name='actionpoint', - name='travel', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='action_points', to='t2f.Travel', verbose_name='Travel'), - ), - migrations.AlterOrderWithRespectTo( - name='itineraryitem', - order_with_respect_to='travel', + migrations.CreateModel( + name='TravelActivity', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('travel_type', models.CharField(blank=True, choices=[('Programmatic Visit', 'Programmatic Visit'), ('Spot Check', 'Spot Check'), ('Advocacy', 'Advocacy'), ('Technical Support', 'Technical Support'), ('Meeting', 'Meeting'), ('Staff Development', 'Staff Development'), ('Staff Entitlement', 'Staff Entitlement')], default='Programmatic Visit', max_length=64, verbose_name='Travel Type')), + ('date', models.DateField(blank=True, null=True, verbose_name='Date')), + ('locations', models.ManyToManyField(related_name='_t2f_travelactivity_locations_+', to='locations.Location', verbose_name='Locations')), + ('partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='partners.partnerorganization', verbose_name='Partner')), + ('partnership', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='travel_activities', to='partners.intervention', verbose_name='Partnership')), + ], + options={ + 'verbose_name_plural': 'Travel Activities', + }, ), ] diff --git a/src/etools/applications/t2f/migrations/0002_fix_null_values.py b/src/etools/applications/t2f/migrations/0002_fix_null_values.py deleted file mode 100644 index 1ddf6fbd4b..0000000000 --- a/src/etools/applications/t2f/migrations/0002_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0001_initial'), - ] - - operations = [ - ] diff --git a/src/etools/applications/t2f/migrations/0002_initial.py b/src/etools/applications/t2f/migrations/0002_initial.py new file mode 100644 index 0000000000..5055f3405c --- /dev/null +++ b/src/etools/applications/t2f/migrations/0002_initial.py @@ -0,0 +1,79 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('reports', '0002_initial'), + ('t2f', '0001_initial'), + ('publics', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='travelactivity', + name='primary_traveler', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Primary Traveler'), + ), + migrations.AddField( + model_name='travelactivity', + name='result', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.result', verbose_name='Result'), + ), + migrations.AddField( + model_name='travelactivity', + name='travels', + field=models.ManyToManyField(related_name='activities', to='t2f.Travel', verbose_name='Travels'), + ), + migrations.AddField( + model_name='travel', + name='currency', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='publics.currency', verbose_name='Currency'), + ), + migrations.AddField( + model_name='travel', + name='office', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.office', verbose_name='Office'), + ), + migrations.AddField( + model_name='travel', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.section', verbose_name='Section'), + ), + migrations.AddField( + model_name='travel', + name='supervisor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor'), + ), + migrations.AddField( + model_name='travel', + name='traveler', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='travels', to=settings.AUTH_USER_MODEL, verbose_name='Traveller'), + ), + migrations.AddField( + model_name='itineraryitem', + name='airlines', + field=models.ManyToManyField(related_name='_t2f_itineraryitem_airlines_+', to='publics.AirlineCompany', verbose_name='Airlines'), + ), + migrations.AddField( + model_name='itineraryitem', + name='dsa_region', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='publics.dsaregion', verbose_name='DSA Region'), + ), + migrations.AddField( + model_name='itineraryitem', + name='travel', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='itinerary', to='t2f.travel', verbose_name='Travel'), + ), + migrations.AlterOrderWithRespectTo( + name='itineraryitem', + order_with_respect_to='travel', + ), + ] diff --git a/src/etools/applications/t2f/migrations/0003_make_not_nullable.py b/src/etools/applications/t2f/migrations/0003_make_not_nullable.py deleted file mode 100644 index 05779dbc72..0000000000 --- a/src/etools/applications/t2f/migrations/0003_make_not_nullable.py +++ /dev/null @@ -1,88 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:35 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0002_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='actionpoint', - name='actions_taken', - field=models.TextField(blank=True, default='', verbose_name='Actions Taken'), - ), - migrations.AlterField( - model_name='actionpoint', - name='comments', - field=models.TextField(blank=True, default='', verbose_name='Comments'), - ), - migrations.AlterField( - model_name='actionpoint', - name='status', - field=models.CharField(blank=True, choices=[('open', 'Open'), ('ongoing', 'Ongoing'), ( - 'completed', 'Completed'), ('cancelled', 'Cancelled')], default='', max_length=254, verbose_name='Status'), - ), - migrations.AlterField( - model_name='invoice', - name='messages', - field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField( - blank=True, default=''), default=[], size=None, verbose_name='Messages'), - ), - migrations.AlterField( - model_name='invoice', - name='vision_fi_id', - field=models.CharField(blank=True, default='', max_length=16, verbose_name='Vision FI ID'), - ), - migrations.AlterField( - model_name='itineraryitem', - name='mode_of_travel', - field=models.CharField(blank=True, choices=[('Plane', 'Plane'), ('Bus', 'Bus'), ('Car', 'Car'), ( - 'Boat', 'Boat'), ('Rail', 'Rail')], default='', max_length=5, verbose_name='Mode of Travel'), - ), - migrations.AlterField( - model_name='travel', - name='additional_note', - field=models.TextField(blank=True, default='', verbose_name='Additional Note'), - ), - migrations.AlterField( - model_name='travel', - name='cancellation_note', - field=models.TextField(blank=True, default='', verbose_name='Cancellation Note'), - ), - migrations.AlterField( - model_name='travel', - name='certification_note', - field=models.TextField(blank=True, default='', verbose_name='Certification Note'), - ), - migrations.AlterField( - model_name='travel', - name='misc_expenses', - field=models.TextField(blank=True, default='', verbose_name='Misc Expenses'), - ), - migrations.AlterField( - model_name='travel', - name='purpose', - field=models.CharField(blank=True, default='', max_length=500, verbose_name='Purpose'), - ), - migrations.AlterField( - model_name='travel', - name='rejection_note', - field=models.TextField(blank=True, default='', verbose_name='Rejection Note'), - ), - migrations.AlterField( - model_name='travel', - name='report_note', - field=models.TextField(blank=True, default='', verbose_name='Report Note'), - ), - migrations.AlterField( - model_name='travelactivity', - name='travel_type', - field=models.CharField(blank=True, choices=[('Programmatic Visit', 'Programmatic Visit'), ('Spot Check', 'Spot Check'), ('Advocacy', 'Advocacy'), ('Technical Support', 'Technical Support'), ( - 'Meeting', 'Meeting'), ('Staff Development', 'Staff Development'), ('Staff Entitlement', 'Staff Entitlement')], default='Programmatic Visit', max_length=64, verbose_name='Travel Type'), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0004_auto_20180524_1831.py b/src/etools/applications/t2f/migrations/0004_auto_20180524_1831.py deleted file mode 100644 index e64b468bec..0000000000 --- a/src/etools/applications/t2f/migrations/0004_auto_20180524_1831.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.11.11 on 2018-05-24 18:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0003_make_not_nullable'), - ] - - operations = [ - migrations.AlterModelOptions( - name='invoice', - options={'ordering': ['pk']}, - ), - ] diff --git a/src/etools/applications/t2f/migrations/0005_remove_travel_section.py b/src/etools/applications/t2f/migrations/0005_remove_travel_section.py deleted file mode 100644 index aa786876c3..0000000000 --- a/src/etools/applications/t2f/migrations/0005_remove_travel_section.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-03 17:29 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0004_auto_20180524_1831'), - ] - - operations = [ - ] diff --git a/src/etools/applications/t2f/migrations/0006_auto_20180703_2200.py b/src/etools/applications/t2f/migrations/0006_auto_20180703_2200.py deleted file mode 100644 index 202c170cbf..0000000000 --- a/src/etools/applications/t2f/migrations/0006_auto_20180703_2200.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-03 22:00 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0005_remove_travel_section'), - ] - - operations = [ - migrations.RenameField( - model_name='travel', - old_name='sector', - new_name='section', - ), - ] diff --git a/src/etools/applications/t2f/migrations/0007_t2factionpoint.py b/src/etools/applications/t2f/migrations/0007_t2factionpoint.py deleted file mode 100644 index b1c97fa05e..0000000000 --- a/src/etools/applications/t2f/migrations/0007_t2factionpoint.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-30 21:51 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0006_auto_20180718_1439'), - ('t2f', '0006_auto_20180703_2200'), - ] - - operations = [ - migrations.CreateModel( - name='T2FActionPoint', - fields=[ - ], - options={ - 'verbose_name': 'T2F Action Point', - 'verbose_name_plural': 'T2F Action Points', - 'abstract': False, - 'proxy': True, - }, - bases=('action_points.actionpoint',), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0008_auto_20180830_1032.py b/src/etools/applications/t2f/migrations/0008_auto_20180830_1032.py deleted file mode 100644 index b81bebfd46..0000000000 --- a/src/etools/applications/t2f/migrations/0008_auto_20180830_1032.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 1.10.8 on 2018-08-30 10:32 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0007_t2factionpoint'), - ] - - operations = [ - migrations.RemoveField( - model_name='actionpoint', - name='assigned_by', - ), - migrations.RemoveField( - model_name='actionpoint', - name='person_responsible', - ), - migrations.RemoveField( - model_name='actionpoint', - name='travel', - ), - migrations.DeleteModel( - name='ActionPoint', - ), - ] diff --git a/src/etools/applications/t2f/migrations/0009_auto_20181227_0815.py b/src/etools/applications/t2f/migrations/0009_auto_20181227_0815.py deleted file mode 100644 index e6ae2cffe3..0000000000 --- a/src/etools/applications/t2f/migrations/0009_auto_20181227_0815.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.0.9 on 2018-12-27 08:15 - -from django.db import migrations - -import django_fsm - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0008_auto_20180830_1032'), - ] - - operations = [ - migrations.AlterField( - model_name='travel', - name='status', - field=django_fsm.FSMField(choices=[('planned', 'Planned'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('completed', 'Completed'), ('cancelled', 'Cancelled'), ('completed', 'Completed')], default='planned', max_length=50, protected=True, verbose_name='Status'), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0010_auto_20181229_0249.py b/src/etools/applications/t2f/migrations/0010_auto_20181229_0249.py deleted file mode 100644 index b57f332b75..0000000000 --- a/src/etools/applications/t2f/migrations/0010_auto_20181229_0249.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 2.0.9 on 2018-12-29 02:49 - -import django.contrib.postgres.fields -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0009_auto_20181227_0815'), - ] - - operations = [ - migrations.AlterField( - model_name='invoice', - name='messages', - field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(blank=True, default=''), default=list, size=None, verbose_name='Messages'), - ), - migrations.AlterField( - model_name='travel', - name='traveler', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='travels', to=settings.AUTH_USER_MODEL, verbose_name='Traveller'), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0011_auto_20190102_1919.py b/src/etools/applications/t2f/migrations/0011_auto_20190102_1919.py deleted file mode 100644 index 880d397313..0000000000 --- a/src/etools/applications/t2f/migrations/0011_auto_20190102_1919.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 2.0.8 on 2019-01-02 19:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0010_auto_20181229_0249'), - ] - - operations = [ - migrations.RemoveField( - model_name='invoice', - name='currency', - ), - migrations.RemoveField( - model_name='invoice', - name='travel', - ), - migrations.RemoveField( - model_name='invoiceitem', - name='invoice', - ), - migrations.DeleteModel( - name='Invoice', - ), - migrations.DeleteModel( - name='InvoiceItem', - ), - ] diff --git a/src/etools/applications/t2f/migrations/0012_auto_20190104_1911.py b/src/etools/applications/t2f/migrations/0012_auto_20190104_1911.py deleted file mode 100644 index 15556827f7..0000000000 --- a/src/etools/applications/t2f/migrations/0012_auto_20190104_1911.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.0.8 on 2019-01-04 19:11 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0011_auto_20190102_1919'), - ] - - operations = [ - migrations.RemoveField( - model_name='clearances', - name='travel', - ), - migrations.DeleteModel( - name='Clearances', - ), - ] diff --git a/src/etools/applications/t2f/migrations/0013_auto_20190103_1345.py b/src/etools/applications/t2f/migrations/0013_auto_20190103_1345.py deleted file mode 100644 index ec2d08ab10..0000000000 --- a/src/etools/applications/t2f/migrations/0013_auto_20190103_1345.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-03 13:45 - -from django.db import migrations, models - -import etools.applications.t2f.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0012_auto_20190104_1911'), - ] - - operations = [ - migrations.AlterField( - model_name='travelattachment', - name='file', - field=models.FileField(blank=True, max_length=255, null=True, upload_to=etools.applications.t2f.models.determine_file_upload_path, verbose_name='File'), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0014_auto_20190123_2101.py b/src/etools/applications/t2f/migrations/0014_auto_20190123_2101.py deleted file mode 100644 index ebea6f67ee..0000000000 --- a/src/etools/applications/t2f/migrations/0014_auto_20190123_2101.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-23 21:01 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0013_auto_20190103_1345'), - ] - - operations = [ - migrations.RemoveField( - model_name='costassignment', - name='business_area', - ), - migrations.RemoveField( - model_name='costassignment', - name='travel', - ), - migrations.RemoveField( - model_name='deduction', - name='travel', - ), - migrations.RemoveField( - model_name='expense', - name='currency', - ), - migrations.RemoveField( - model_name='expense', - name='travel', - ), - migrations.RemoveField( - model_name='expense', - name='type', - ), - migrations.DeleteModel( - name='CostAssignment', - ), - migrations.DeleteModel( - name='Deduction', - ), - migrations.DeleteModel( - name='Expense', - ), - ] diff --git a/src/etools/applications/t2f/migrations/0015_auto_20190326_1425.py b/src/etools/applications/t2f/migrations/0015_auto_20190326_1425.py deleted file mode 100644 index 6c4a160ae4..0000000000 --- a/src/etools/applications/t2f/migrations/0015_auto_20190326_1425.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.1.7 on 2019-03-26 14:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('t2f', '0014_auto_20190123_2101'), - ] - - operations = [ - migrations.AlterField( - model_name='itineraryitem', - name='arrival_date', - field=models.DateField(verbose_name='Arrival Date'), - ), - migrations.AlterField( - model_name='itineraryitem', - name='departure_date', - field=models.DateField(verbose_name='Departure Date'), - ), - migrations.AlterField( - model_name='travel', - name='end_date', - field=models.DateField(blank=True, null=True, verbose_name='End Date'), - ), - migrations.AlterField( - model_name='travel', - name='start_date', - field=models.DateField(blank=True, null=True, verbose_name='Start Date'), - ), - migrations.AlterField( - model_name='travelactivity', - name='date', - field=models.DateField(blank=True, null=True, verbose_name='Date'), - ), - ] diff --git a/src/etools/applications/t2f/migrations/0016_auto_20191011_1348.py b/src/etools/applications/t2f/migrations/0016_auto_20191011_1348.py deleted file mode 100644 index f356469845..0000000000 --- a/src/etools/applications/t2f/migrations/0016_auto_20191011_1348.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-11 13:48 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0021_auto_20191011_1201'), - ('t2f', '0015_auto_20190326_1425'), - ] - - operations = [ - migrations.AlterField( - model_name='travel', - name='office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='reports.Office', verbose_name='Office'), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0001_initial.py b/src/etools/applications/tpm/migrations/0001_initial.py index d89fa81faa..6e892b77f8 100644 --- a/src/etools/applications/tpm/migrations/0001_initial.py +++ b/src/etools/applications/tpm/migrations/0001_initial.py @@ -1,14 +1,11 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 import datetime - +from django.db import migrations, models import django.db.models.deletion import django.db.models.manager import django.utils.timezone -from django.conf import settings -from django.db import migrations, models from django.utils.timezone import utc - import django_fsm import model_utils.fields @@ -18,81 +15,34 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0001_initial'), - ('reports', '0001_initial'), - ('tpmpartners', '0001_initial'), - ('activities', '0001_initial'), + ('activities', '0002_initial'), + ('action_points', '0001_initial'), ] operations = [ - migrations.CreateModel( - name='TPMActionPoint', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('due_date', models.DateField(verbose_name='Due Date')), - ('description', models.TextField(verbose_name='Description')), - ('comments', models.TextField(blank=True, verbose_name='Comments')), - ('status', models.CharField(choices=[('open', 'Open'), ('progress', 'In-Progress'), ('completed', - 'Completed'), ('cancelled', 'Cancelled')], default='open', max_length=9, verbose_name='Status')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='created_tpm_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Assigned By')), - ('person_responsible', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='tpm_action_points', to=settings.AUTH_USER_MODEL, verbose_name='Person Responsible')), - ], - options={ - 'abstract': False, - }, - ), migrations.CreateModel( name='TPMActivity', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, - parent_link=True, primary_key=True, serialize=False, to='activities.Activity')), + ('activity_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='activities.activity')), ('additional_information', models.TextField(blank=True, verbose_name='Additional Information')), ('is_pv', models.BooleanField(default=False, verbose_name='HACT Programmatic Visit')), - ('section', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='tpm_activities', to='reports.Section', verbose_name='Section')), ], options={ - 'ordering': ['tpm_visit', 'id'], 'verbose_name_plural': 'TPM Activities', + 'ordering': ['tpm_visit', 'id'], }, bases=('activities.activity',), ), - migrations.CreateModel( - name='TPMPermission', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('user_type', models.CharField(max_length=30)), - ('permission', models.CharField(choices=[('view', 'View'), - ('edit', 'Edit'), ('action', 'Action')], max_length=10)), - ('permission_type', models.CharField(choices=[ - ('allow', 'Allow'), ('disallow', 'Disallow')], default='allow', max_length=10)), - ('target', models.CharField(max_length=100)), - ('instance_status', models.CharField(max_length=32, verbose_name='Instance Status')), - ], - options={ - 'abstract': False, - }, - ), migrations.CreateModel( name='TPMVisit', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('deleted_at', models.DateTimeField(default=datetime.datetime( - 1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('cancelled', 'Cancelled'), ('tpm_accepted', 'TPM Accepted'), ('tpm_rejected', 'TPM Rejected'), ( - 'tpm_reported', 'TPM Reported'), ('tpm_report_rejected', 'Sent Back to TPM'), ('unicef_approved', 'UNICEF Approved')], default='draft', max_length=20, protected=True, verbose_name='Status')), - ('reject_comment', models.TextField(blank=True, verbose_name='Request For More Information')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('deleted_at', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=utc), verbose_name='Deleted At')), + ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('assigned', 'Assigned'), ('cancelled', 'Cancelled'), ('tpm_accepted', 'TPM Accepted'), ('tpm_rejected', 'TPM Rejected'), ('tpm_reported', 'TPM Reported'), ('tpm_report_rejected', 'Sent Back to TPM'), ('unicef_approved', 'UNICEF Approved')], default='draft', max_length=20, protected=True, verbose_name='Status')), + ('cancel_comment', models.TextField(blank=True, verbose_name='Cancel Comment')), + ('reject_comment', models.TextField(blank=True, verbose_name='Reason for Rejection')), ('approval_comment', models.TextField(blank=True, verbose_name='Approval Comments')), ('visit_information', models.TextField(blank=True, verbose_name='Visit Information')), ('date_of_assigned', models.DateField(blank=True, null=True, verbose_name='Date of Assigned')), @@ -100,56 +50,43 @@ class Migration(migrations.Migration): ('date_of_tpm_accepted', models.DateField(blank=True, null=True, verbose_name='Date of TPM Accepted')), ('date_of_tpm_rejected', models.DateField(blank=True, null=True, verbose_name='Date of TPM Rejected')), ('date_of_tpm_reported', models.DateField(blank=True, null=True, verbose_name='Date of TPM Reported')), - ('date_of_tpm_report_rejected', models.DateField( - blank=True, null=True, verbose_name='Date of Sent Back to TPM')), + ('date_of_tpm_report_rejected', models.DateField(blank=True, null=True, verbose_name='Date of Sent Back to TPM')), ('date_of_unicef_approved', models.DateField(blank=True, null=True, verbose_name='Date of UNICEF Approved')), - ('offices', models.ManyToManyField(blank=True, related_name='tpm_visits', - to='users.Office', verbose_name='Office(s) of UNICEF Focal Point(s)')), - ('tpm_partner', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - to='tpmpartners.TPMPartner', verbose_name='TPM Vendor')), - ('tpm_partner_focal_points', models.ManyToManyField(blank=True, related_name='tpm_visits', - to='tpmpartners.TPMPartnerStaffMember', verbose_name='TPM Focal Points')), - ('unicef_focal_points', models.ManyToManyField(blank=True, related_name='tpm_visits', - to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points')), ], options={ - 'abstract': False, - 'ordering': ('id',), 'verbose_name': 'TPM Visit', - 'verbose_name_plural': 'TPM Visits' + 'verbose_name_plural': 'TPM Visits', + 'ordering': ('id',), }, managers=[ ('admin_objects', django.db.models.manager.Manager()), ], ), + migrations.CreateModel( + name='TPMActionPoint', + fields=[ + ], + options={ + 'verbose_name': 'TPM Action Point', + 'verbose_name_plural': 'TPM Action Points', + 'abstract': False, + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('action_points.actionpoint',), + ), migrations.CreateModel( name='TPMVisitReportRejectComment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('rejected_at', models.DateTimeField(auto_now_add=True, verbose_name='Rejected At')), - ('reject_reason', models.TextField(verbose_name='Reason of Rejection')), - ('tpm_visit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='report_reject_comments', to='tpm.TPMVisit', verbose_name='Visit')), + ('reject_reason', models.TextField(verbose_name='Reason for Rejection')), + ('tpm_visit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reject_comments', to='tpm.tpmvisit', verbose_name='Visit')), ], options={ - 'ordering': ['tpm_visit', 'id'], 'verbose_name_plural': 'Report Reject Comments', + 'ordering': ['tpm_visit', 'id'], }, ), - migrations.AlterUniqueTogether( - name='tpmpermission', - unique_together=set([('user_type', 'instance_status', 'target', 'permission_type')]), - ), - migrations.AddField( - model_name='tpmactivity', - name='tpm_visit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='tpm_activities', to='tpm.TPMVisit', verbose_name='Visit'), - ), - migrations.AddField( - model_name='tpmactionpoint', - name='tpm_visit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='action_points', to='tpm.TPMVisit', verbose_name='Visit'), - ), ] diff --git a/src/etools/applications/tpm/migrations/0002_initial.py b/src/etools/applications/tpm/migrations/0002_initial.py new file mode 100644 index 0000000000..4540cbc084 --- /dev/null +++ b/src/etools/applications/tpm/migrations/0002_initial.py @@ -0,0 +1,55 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('tpmpartners', '0001_initial'), + ('reports', '0002_initial'), + ('tpm', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tpmvisit', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='tpmvisit', + name='tpm_partner', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='tpmpartners.tpmpartner', verbose_name='TPM Vendor'), + ), + migrations.AddField( + model_name='tpmvisit', + name='tpm_partner_focal_points', + field=models.ManyToManyField(blank=True, related_name='tpm_visits', to=settings.AUTH_USER_MODEL, verbose_name='TPM Focal Points'), + ), + migrations.AddField( + model_name='tpmactivity', + name='offices', + field=models.ManyToManyField(blank=True, to='reports.Office', verbose_name='Office(s) of UNICEF Focal Point(s)'), + ), + migrations.AddField( + model_name='tpmactivity', + name='section', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tpm_activities', to='reports.section', verbose_name='Section'), + ), + migrations.AddField( + model_name='tpmactivity', + name='tpm_visit', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tpm_activities', to='tpm.tpmvisit', verbose_name='Visit'), + ), + migrations.AddField( + model_name='tpmactivity', + name='unicef_focal_points', + field=models.ManyToManyField(blank=True, related_name='_tpm_tpmactivity_unicef_focal_points_+', to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), + ), + ] diff --git a/src/etools/applications/tpm/migrations/0002_tpmvisit_cancel_comment.py b/src/etools/applications/tpm/migrations/0002_tpmvisit_cancel_comment.py deleted file mode 100644 index 9afcb7053b..0000000000 --- a/src/etools/applications/tpm/migrations/0002_tpmvisit_cancel_comment.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-19 09:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpm', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='tpmvisit', - name='cancel_comment', - field=models.TextField(blank=True, verbose_name='Cancel Comment'), - ), migrations.AlterField( - model_name='tpmvisit', - name='reject_comment', - field=models.TextField(blank=True, verbose_name='Reason for Rejection'), - ), - migrations.AlterField( - model_name='tpmvisitreportrejectcomment', - name='reject_reason', - field=models.TextField(verbose_name='Reason for Rejection'), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0003_tpmactivity_unicef_focal_points.py b/src/etools/applications/tpm/migrations/0003_tpmactivity_unicef_focal_points.py deleted file mode 100644 index 6cfc3c5bae..0000000000 --- a/src/etools/applications/tpm/migrations/0003_tpmactivity_unicef_focal_points.py +++ /dev/null @@ -1,65 +0,0 @@ -# Generated by Django 1.11 on 2018-04-24 14:15 - -from django.conf import settings -from django.db import migrations, models - - -def migrate_focal_points(apps, schema_editor): - TPMActivity = apps.get_model('tpm', 'TPMActivity') - - for activity in TPMActivity.objects.all(): - activity.unicef_focal_points.add(*activity.tpm_visit.unicef_focal_points.all()) - - -def migrate_focal_points_backward(apps, schema_editor): - TPMActivity = apps.get_model('tpm', 'TPMActivity') - - for activity in TPMActivity.objects.all(): - activity.tpm_visit.unicef_focal_points.add(*activity.unicef_focal_points.all()) - - -def migrate_offices(apps, schema_editor): - TPMActivity = apps.get_model('tpm', 'TPMActivity') - - for activity in TPMActivity.objects.all(): - activity.offices.add(*activity.tpm_visit.offices.all()) - - -def migrate_offices_backward(apps, schema_editor): - TPMActivity = apps.get_model('tpm', 'TPMActivity') - - for activity in TPMActivity.objects.all(): - activity.tpm_visit.offices.add(*activity.offices.all()) - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('tpm', '0002_tpmvisit_cancel_comment'), - ] - - operations = [ - migrations.AddField( - model_name='tpmactivity', - name='unicef_focal_points', - field=models.ManyToManyField(blank=True, related_name='_tpmactivity_unicef_focal_points_+', - to=settings.AUTH_USER_MODEL, verbose_name='UNICEF Focal Points'), - ), - migrations.AddField( - model_name='tpmactivity', - name='offices', - field=models.ManyToManyField(blank=True, related_name='_tpmactivity_offices_+', - to='users.Office', verbose_name='Office(s) of UNICEF Focal Point(s)'), - ), - migrations.RunPython(migrate_focal_points, migrate_focal_points_backward), - migrations.RunPython(migrate_offices, migrate_offices_backward), - migrations.RemoveField( - model_name='tpmvisit', - name='unicef_focal_points', - ), - migrations.RemoveField( - model_name='tpmvisit', - name='offices', - ), - ] diff --git a/src/etools/applications/tpm/migrations/0004_delete_tpmpermission.py b/src/etools/applications/tpm/migrations/0004_delete_tpmpermission.py deleted file mode 100644 index 1c9fb42789..0000000000 --- a/src/etools/applications/tpm/migrations/0004_delete_tpmpermission.py +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-04 13:40 -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpm', '0003_tpmactivity_unicef_focal_points'), - ] - - operations = [ - migrations.DeleteModel( - name='TPMPermission', - ), - ] diff --git a/src/etools/applications/tpm/migrations/0005_tpmvisit_author.py b/src/etools/applications/tpm/migrations/0005_tpmvisit_author.py deleted file mode 100644 index 62a993e583..0000000000 --- a/src/etools/applications/tpm/migrations/0005_tpmvisit_author.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-21 14:22 -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('tpm', '0004_delete_tpmpermission'), - ] - - operations = [ - migrations.AddField( - model_name='tpmvisit', - name='author', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0006_auto_20180522_0736.py b/src/etools/applications/tpm/migrations/0006_auto_20180522_0736.py deleted file mode 100644 index 8fc627c78a..0000000000 --- a/src/etools/applications/tpm/migrations/0006_auto_20180522_0736.py +++ /dev/null @@ -1,100 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-22 07:36 -from __future__ import unicode_literals - -from django.db import migrations - -# tpm action point, action point -statuses_mapping = { - 'open': 'open', - 'completed': 'completed', -} -reverse_statuses_mapping = dict(zip(statuses_mapping.values(), statuses_mapping.keys())) - - -def migrate_action_points(apps, schema_editor): - ActionPoint = apps.get_model('action_points', 'ActionPoint') - TPMActionPoint = apps.get_model('tpm', 'TPMActionPoint') - - action_points_to_create = [] - - for action_point in TPMActionPoint.objects.all(): - activity = action_point.tpm_visit.tpm_activities.first() - if not activity: - continue - - new_action_point = ActionPoint( - tpm_activity=activity, - partner=activity.partner, - intervention=activity.intervention, - cp_output=activity.cp_output, - - description=action_point.description, - due_date=action_point.due_date, - author=action_point.author, - assigned_by=action_point.author, - assigned_to=action_point.person_responsible, - status=statuses_mapping.get(action_point.status, 'open'), - ) - action_points_to_create.append(new_action_point) - - ActionPoint.objects.bulk_create(action_points_to_create) - - -def migrate_action_points_backward(apps, schema_editor): - ActionPoint = apps.get_model('action_points', 'ActionPoint') - TPMActionPoint = apps.get_model('tpm', 'TPMActionPoint') - - action_points_to_create = [] - - for action_point in ActionPoint.objects.filter(tpm_activity__isnull=False): - new_action_point = TPMActionPoint( - tpm_visit=action_point.tpm_activity.tpm_visit, - description=action_point.description, - due_date=action_point.due_date, - author=action_point.author, - person_responsible=action_point.assigned_to, - status=reverse_statuses_mapping[action_point.status], - ) - action_points_to_create.append(new_action_point) - action_point.delete() - - TPMActionPoint.objects.bulk_create(action_points_to_create) - - -class Migration(migrations.Migration): - - dependencies = [ - ('action_points', '0004_auto_20180521_1052'), - ('tpm', '0005_tpmvisit_author'), - ] - - operations = [ - migrations.RunPython(migrate_action_points, migrate_action_points_backward), - migrations.RemoveField( - model_name='tpmactionpoint', - name='author', - ), - migrations.RemoveField( - model_name='tpmactionpoint', - name='person_responsible', - ), - migrations.RemoveField( - model_name='tpmactionpoint', - name='tpm_visit', - ), - migrations.DeleteModel( - name='TPMActionPoint', - ), - migrations.CreateModel( - name='TPMActionPoint', - fields=[ - ], - options={ - 'verbose_name': 'TPM Action Point', - 'verbose_name_plural': 'TPM Action Points', - 'abstract': False, - 'proxy': True, - }, - bases=('action_points.actionpoint',), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0007_auto_20180926_1310.py b/src/etools/applications/tpm/migrations/0007_auto_20180926_1310.py deleted file mode 100644 index ab36087c13..0000000000 --- a/src/etools/applications/tpm/migrations/0007_auto_20180926_1310.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 1.10.8 on 2018-09-26 13:10 -from __future__ import unicode_literals - -from django.db import migrations - - -def update_visit_report_attachment(apps, schema_editor): - Attachment = apps.get_model('unicef_attachments', 'Attachment') - ContentType = apps.get_model('contenttypes', 'ContentType') - tpmvisit_ct = ContentType.objects.get(app_label='tpm', model='tpmvisit') - - Attachment.objects.filter(content_type=tpmvisit_ct).update(code='visit_report_attachments') - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpm', '0006_auto_20180522_0736'), - ('contenttypes', '0002_remove_content_type_name'), - ('unicef_attachments', '0002_attachmentlink'), - ] - - operations = [ - migrations.RunPython(update_visit_report_attachment, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/tpm/migrations/0008_auto_20191016_1312.py b/src/etools/applications/tpm/migrations/0008_auto_20191016_1312.py deleted file mode 100644 index 007e255423..0000000000 --- a/src/etools/applications/tpm/migrations/0008_auto_20191016_1312.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.6 on 2019-10-16 13:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpm', '0007_auto_20180926_1310'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmactivity', - name='offices', - field=models.ManyToManyField(blank=True, to='users.Office', verbose_name='Office(s) of UNICEF Focal Point(s)'), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0009_auto_20191014_1304.py b/src/etools/applications/tpm/migrations/0009_auto_20191014_1304.py deleted file mode 100644 index 3e2987d29e..0000000000 --- a/src/etools/applications/tpm/migrations/0009_auto_20191014_1304.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-14 13:04 -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0021_auto_20191011_1201'), - ('tpm', '0008_auto_20191016_1312'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmactivity', - name='offices', - field=models.ManyToManyField(blank=True, related_name='_tpmactivity_offices_+', to='reports.Office', verbose_name='Office(s) of UNICEF Focal Point(s)'), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0010_auto_20191029_1826.py b/src/etools/applications/tpm/migrations/0010_auto_20191029_1826.py deleted file mode 100644 index 0d99912834..0000000000 --- a/src/etools/applications/tpm/migrations/0010_auto_20191029_1826.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.6 on 2019-10-29 18:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpm', '0009_auto_20191014_1304'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmactivity', - name='offices', - field=models.ManyToManyField(blank=True, to='reports.Office', verbose_name='Office(s) of UNICEF Focal Point(s)'), - ), - ] diff --git a/src/etools/applications/tpm/migrations/0011_auto_20221213_1229.py b/src/etools/applications/tpm/migrations/0011_auto_20221213_1229.py deleted file mode 100644 index 8c8f827bdb..0000000000 --- a/src/etools/applications/tpm/migrations/0011_auto_20221213_1229.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-13 12:29 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('tpmpartners', '0010_alter_tpmpartnerstaffmember_tpm_partner'), - ('tpm', '0010_auto_20191029_1826'), - ] - - operations = [ - migrations.RenameField( - model_name='tpmvisit', - old_name='tpm_partner_focal_points', - new_name='old_tpm_partner_focal_points', - ), - ] diff --git a/src/etools/applications/tpm/migrations/0012_auto_20221213_1234.py b/src/etools/applications/tpm/migrations/0012_auto_20221213_1234.py deleted file mode 100644 index b6926e1195..0000000000 --- a/src/etools/applications/tpm/migrations/0012_auto_20221213_1234.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-13 12:34 - -from django.conf import settings -from django.db import migrations, models, connection - - -def migrate_visit_staff_members_to_users(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - TPMVisit = apps.get_model('tpm', 'TPMVisit') - - for v in TPMVisit.admin_objects.all(): - v.tpm_partner_focal_points.add(*[ - staff_member.user for staff_member in v.old_tpm_partner_focal_points.all().select_related('user') - ]) - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0010_alter_tpmpartnerstaffmember_tpm_partner'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0021_migrate_to_realms'), - ('tpm', '0011_auto_20221213_1229'), - ] - - operations = [ - migrations.AddField( - model_name='tpmvisit', - name='tpm_partner_focal_points', - field=models.ManyToManyField(blank=True, related_name='tpm_visits', to=settings.AUTH_USER_MODEL, verbose_name='TPM Focal Points'), - ), - migrations.RunPython(migrate_visit_staff_members_to_users, migrations.RunPython.noop), - migrations.RemoveField( - model_name='tpmvisit', - name='old_tpm_partner_focal_points', - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0001_initial.py b/src/etools/applications/tpm/tpmpartners/migrations/0001_initial.py index cdbd358dfb..f2d9dd082a 100644 --- a/src/etools/applications/tpm/tpmpartners/migrations/0001_initial.py +++ b/src/etools/applications/tpm/tpmpartners/migrations/0001_initial.py @@ -1,10 +1,10 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 +import django.contrib.postgres.fields +from django.db import migrations, models import django.db.models.deletion import django.utils.timezone -from django.conf import settings -from django.db import migrations, models - +import etools.libraries.tenant_support.models import model_utils.fields @@ -13,7 +13,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -21,47 +20,43 @@ class Migration(migrations.Migration): name='TPMPartner', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('vendor_number', models.CharField(blank=True, max_length=30, - null=True, unique=True, verbose_name='Vendor Number')), - ('name', models.CharField(max_length=255, verbose_name='Vendor Name')), - ('street_address', models.CharField(blank=True, max_length=500, null=True, verbose_name='Address')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('postal_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Postal Code')), - ('country', models.CharField(blank=True, max_length=255, null=True, verbose_name='Country')), - ('email', models.CharField(blank=True, max_length=255, null=True, verbose_name='Email')), - ('phone_number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone Number')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('street_address', models.CharField(blank=True, default='', max_length=500, verbose_name='Address')), + ('city', models.CharField(blank=True, default='', max_length=255, verbose_name='City')), + ('postal_code', models.CharField(blank=True, default='', max_length=32, verbose_name='Postal Code')), + ('country', models.CharField(blank=True, default='', max_length=255, verbose_name='Country')), + ('email', models.CharField(blank=True, default='', max_length=255, verbose_name='Email')), + ('phone_number', models.CharField(blank=True, default='', max_length=32, verbose_name='Phone Number')), ('vision_synced', models.BooleanField(default=False, verbose_name='Synced from VISION')), ('blocked', models.BooleanField(default=False, verbose_name='Blocked in VISION')), ('hidden', models.BooleanField(default=False, verbose_name='Hidden')), ('deleted_flag', models.BooleanField(default=False, verbose_name='Marked For Deletion in VISION')), ], options={ - 'abstract': False, - 'ordering': ('id',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations', + 'ordering': ('organization__name',), + 'abstract': False, + 'base_manager_name': 'objects', }, ), migrations.CreateModel( name='TPMPartnerStaffMember', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('receive_tpm_notifications', models.BooleanField( - default=False, verbose_name='Receive Notifications on TPM Tasks')), - ('tpm_partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - related_name='staff_members', to='tpmpartners.TPMPartner', verbose_name='TPM Vendor')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='tpmpartners_tpmpartnerstaffmember', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('history', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128, verbose_name='History'), blank=True, default=list, size=None)), + ('receive_tpm_notifications', models.BooleanField(default=False, verbose_name='Receive Notifications on TPM Tasks')), + ('tpm_partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='old_staff_members', to='tpmpartners.tpmpartner', verbose_name='TPM Vendor')), ], options={ - 'abstract': False, - 'ordering': ('id',), 'verbose_name': 'Staff Member', 'verbose_name_plural': 'Staff Members', + 'ordering': ('id',), + 'abstract': False, }, + bases=(etools.libraries.tenant_support.models.ModelHavingTenantRelationsMixin, models.Model), ), ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0002_auto_20180308_2137.py b/src/etools/applications/tpm/tpmpartners/migrations/0002_auto_20180308_2137.py deleted file mode 100644 index 6e3bfffa05..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0002_auto_20180308_2137.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-08 21:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmpartner', - name='city', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='City'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='country', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Country'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='email', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Email'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='phone_number', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='postal_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Postal Code'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='street_address', - field=models.CharField(blank=True, default='', max_length=500, verbose_name='Address'), - ), - migrations.AlterField( - model_name='tpmpartner', - name='vendor_number', - field=models.CharField(blank=True, default='', max_length=30, unique=True, verbose_name='Vendor Number'), - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0002_initial.py b/src/etools/applications/tpm/tpmpartners/migrations/0002_initial.py new file mode 100644 index 0000000000..7db3026dcb --- /dev/null +++ b/src/etools/applications/tpm/tpmpartners/migrations/0002_initial.py @@ -0,0 +1,35 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('tpmpartners', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('users', '0001_initial'), + ('organizations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tpmpartnerstaffmember', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='tpmpartners_tpmpartnerstaffmember', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='tpmpartner', + name='countries', + field=models.ManyToManyField(blank=True, to='users.Country'), + ), + migrations.AddField( + model_name='tpmpartner', + name='organization', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), + ), + ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0003_tpmpartner_countries.py b/src/etools/applications/tpm/tpmpartners/migrations/0003_tpmpartner_countries.py deleted file mode 100644 index 3718799219..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0003_tpmpartner_countries.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 1.11 on 2018-04-26 11:27 - -from django.db import migrations, models - - -def migrate_countries(apps, schema_editor): - TPMPartner = apps.get_model('tpmpartners', 'TPMPartner') - Country = apps.get_model('users', 'Country') - - all_countries = Country.objects.all() - for partner in TPMPartner.objects.all(): - partner.countries.add(*all_countries) - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0005_auto_20180419_2113'), - ('tpmpartners', '0002_auto_20180308_2137'), - ] - - operations = [ - migrations.AddField( - model_name='tpmpartner', - name='countries', - field=models.ManyToManyField(blank=True, to='users.Country'), - ), - migrations.RunPython(migrate_countries, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0004_auto_20180503_1311.py b/src/etools/applications/tpm/tpmpartners/migrations/0004_auto_20180503_1311.py deleted file mode 100644 index 9349a12aac..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0004_auto_20180503_1311.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 1.10.8 on 2018-05-03 13:11 - -from django.db import migrations - - -def migrate_tpm_staff_members(apps, schema_editor): - TPMPartnerStaffMember = apps.get_model('tpmpartners', 'TPMPartnerStaffMember') - Group = apps.get_model('auth', 'Group') - - third_party_group, created = Group.objects.get_or_create(name='Third Party Monitor') - for staff in TPMPartnerStaffMember.objects.exclude(user__groups=third_party_group): - staff.user.groups.add(third_party_group) - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0003_tpmpartner_countries'), - ('auth', '0008_alter_user_username_max_length'), - ('users', '__first__'), - ] - - operations = [ - migrations.RunPython(migrate_tpm_staff_members, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0005_auto_20190625_1437.py b/src/etools/applications/tpm/tpmpartners/migrations/0005_auto_20190625_1437.py deleted file mode 100644 index 3ae5c9a3cd..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0005_auto_20190625_1437.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.2 on 2019-06-25 14:37 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0004_auto_20180503_1311'), - ] - - operations = [ - migrations.AlterModelOptions( - name='tpmpartner', - options={'ordering': ('name',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations'}, - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0006_auto_20210415_1546.py b/src/etools/applications/tpm/tpmpartners/migrations/0006_auto_20210415_1546.py deleted file mode 100644 index d758543507..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0006_auto_20210415_1546.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 2.2.20 on 2021-04-15 15:46 - -import django.contrib.postgres.fields -from django.db import migrations, models -import django.utils.timezone -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0005_auto_20190625_1437'), - ] - - operations = [ - migrations.AddField( - model_name='tpmpartnerstaffmember', - name='created', - field=model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created'), - ), - migrations.AddField( - model_name='tpmpartnerstaffmember', - name='history', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=50, verbose_name='History'), blank=True, default=list, size=None), - ), - migrations.AddField( - model_name='tpmpartnerstaffmember', - name='modified', - field=model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified'), - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0007_auto_20210421_1745.py b/src/etools/applications/tpm/tpmpartners/migrations/0007_auto_20210421_1745.py deleted file mode 100644 index 74cb82b9ae..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0007_auto_20210421_1745.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.20 on 2021-04-21 17:45 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0006_auto_20210415_1546'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmpartnerstaffmember', - name='history', - field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128, verbose_name='History'), blank=True, default=list, size=None), - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0008_tpmpartner_organization.py b/src/etools/applications/tpm/tpmpartners/migrations/0008_tpmpartner_organization.py deleted file mode 100644 index 6be9555cda..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0008_tpmpartner_organization.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-09 17:16 -import logging - -from django.db import migrations, models, transaction -import django.db.models.deletion - - -def migrate_tpm_partners_to_organizations(apps, schema_editor): - Organization = apps.get_model('organizations', 'Organization') - TPMPartner = apps.get_model('tpmpartners', 'TPMPartner') - - with transaction.atomic(): - for tpm_partner in TPMPartner.objects.all(): - if not tpm_partner.vendor_number: - logging.info(f"No vendor_number set for TPMPartner " - f"{tpm_partner.name} id: {tpm_partner.pk}. Skipping..") - continue - organization, _ = Organization.objects.get_or_create( - vendor_number=tpm_partner.vendor_number, - defaults={ - 'name': tpm_partner.name, - }) - tpm_partner.organization = organization - tpm_partner.save(update_fields=['organization']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('tpmpartners', '0007_auto_20210421_1745'), - ] - - operations = [ - migrations.AddField( - model_name='tpmpartner', - name='organization', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), - ), - migrations.AlterModelOptions( - name='tpmpartner', - options={'base_manager_name': 'objects', 'ordering': ('organization__name',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations'}, - ), - migrations.RunPython(migrate_tpm_partners_to_organizations, migrations.RunPython.noop), - migrations.RemoveField( - model_name='tpmpartner', - name='name', - ), - migrations.RemoveField( - model_name='tpmpartner', - name='vendor_number', - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0009_alter_tpmpartner_organization.py b/src/etools/applications/tpm/tpmpartners/migrations/0009_alter_tpmpartner_organization.py deleted file mode 100644 index ef7fdda7f2..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0009_alter_tpmpartner_organization.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.6 on 2022-10-13 12:41 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('tpmpartners', '0008_tpmpartner_organization'), - ] - - operations = [ - migrations.AlterField( - model_name='tpmpartner', - name='organization', - field=models.OneToOneField(default=4, on_delete=django.db.models.deletion.CASCADE, to='organizations.organization'), - preserve_default=False, - ), - ] diff --git a/src/etools/applications/tpm/tpmpartners/migrations/0010_alter_tpmpartnerstaffmember_tpm_partner.py b/src/etools/applications/tpm/tpmpartners/migrations/0010_alter_tpmpartnerstaffmember_tpm_partner.py deleted file mode 100644 index 3619e84ac4..0000000000 --- a/src/etools/applications/tpm/tpmpartners/migrations/0010_alter_tpmpartnerstaffmember_tpm_partner.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-13 12:29 - -from django.db import migrations, models, IntegrityError, connection -import django.db.models.deletion - - -def migrate_tpm_staff_members_to_realms(apps, schema_editor): - if connection.tenant.schema_name in ["public", "test"]: - return - - Realm = apps.get_model('users', 'Realm') - Group = apps.get_model('auth', 'Group') - TPMPartner = apps.get_model('tpmpartners', 'TPMPartner') - Country = apps.get_model("users", "country") - country = Country.objects.get(schema_name=connection.tenant.schema_name) - - tpm_group = Group.objects.get_or_create(name='Third Party Monitor')[0] - - for firm in TPMPartner.objects.all(): - for staff_member in firm.staff_members.all(): - try: - Realm.objects.create( - user=staff_member.user, - country=country, - organization=firm.organization, - group=tpm_group, - ) - except IntegrityError: - # all good, realm already exists - pass - - -def migrate_receive_tpm_notifications_to_profile(apps, schema_editor): - UserProfile = apps.get_model('users', 'UserProfile') - UserProfile.objects.filter( - user__tpmpartners_tpmpartnerstaffmember__receive_tpm_notifications=True, - ).update(receive_tpm_notifications=True) - - -class Migration(migrations.Migration): - - dependencies = [ - ('tpmpartners', '0009_alter_tpmpartner_organization'), - ('users', '0022_userprofile_receive_tpm_notifications'), - ('auth', '0008_alter_user_username_max_length'), - ] - - operations = [ - migrations.RunPython(migrate_tpm_staff_members_to_realms, migrations.RunPython.noop), - migrations.AlterField( - model_name='tpmpartnerstaffmember', - name='tpm_partner', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='old_staff_members', to='tpmpartners.tpmpartner', verbose_name='TPM Vendor'), - ), - migrations.RunPython(migrate_receive_tpm_notifications_to_profile, migrations.RunPython.noop), - ] diff --git a/src/etools/applications/travel/migrations/0001_initial.py b/src/etools/applications/travel/migrations/0001_initial.py index f1fb249fa7..660f8b1dce 100644 --- a/src/etools/applications/travel/migrations/0001_initial.py +++ b/src/etools/applications/travel/migrations/0001_initial.py @@ -1,6 +1,5 @@ -# Generated by Django 2.2.7 on 2021-05-27 14:15 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone @@ -13,51 +12,39 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('field_monitoring_planning', '0009_auto_20210318_2046'), - ('locations', '0001_initial'), - ('reports', '0025_auto_20191220_2022'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('partners', '0048_auto_20210506_0803'), + ('reports', '0001_initial'), ] operations = [ migrations.CreateModel( - name='Trip', + name='Activity', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('reference_number', models.CharField(max_length=100, unique=True, verbose_name='Reference Number')), - ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('submission', 'Submission Review'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('review', 'Review'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='draft', max_length=30, verbose_name='Status')), - ('title', models.CharField(blank=True, max_length=120, verbose_name='Title')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), - ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), - ('office', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.Office', verbose_name='Office')), - ('section', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.Section', verbose_name='Section')), - ('supervisor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='supervised_itineraries', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor')), - ('traveller', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='itineraries', to=settings.AUTH_USER_MODEL, verbose_name='Traveller')), + ('activity_date', models.DateField(verbose_name='Activity Date')), + ('activity_type', models.CharField(blank=True, choices=[('Monitoring Activity', 'Monitoring Activity'), ('Technical Support', 'Technical Support'), ('Meeting', 'Meeting'), ('Staff Development', 'Staff Development'), ('Staff Entitlement', 'Staff Entitlement')], default='Monitoring Activity', max_length=64, verbose_name='Activity Type')), ], options={ - 'verbose_name': 'Trip', - 'verbose_name_plural': 'Itineraries', - 'ordering': ('-start_date',), + 'verbose_name': 'Activity', + 'verbose_name_plural': 'Activities', + 'ordering': ['-activity_date'], }, ), migrations.CreateModel( - name='TripStatusHistory', + name='ItineraryItem', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('status', models.CharField(choices=[('draft', 'Draft'), ('submission', 'Submission Review'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('review', 'Review'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], max_length=30)), - ('comment', models.TextField(blank=True)), - ('trip', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='status_history', to='travel.Trip', verbose_name='Trip')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), + ('travel_method', models.CharField(blank=True, max_length=150, verbose_name='Travel Method')), + ('destination', models.CharField(blank=True, max_length=150, verbose_name='Destination')), ], options={ - 'verbose_name': 'Trip Status History', - 'verbose_name_plural': 'Trip Status History', - 'ordering': ('-created',), + 'verbose_name': 'Itinerary Item', + 'verbose_name_plural': 'Itinerary Items', }, ), migrations.CreateModel( @@ -67,7 +54,6 @@ class Migration(migrations.Migration): ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), ('narrative', models.TextField(blank=True, verbose_name='Narrative')), - ('trip', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='report', to='travel.Trip', verbose_name='Trip')), ], options={ 'verbose_name': 'Report', @@ -75,40 +61,43 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='ItineraryItem', + name='Trip', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('reference_number', models.CharField(max_length=100, unique=True, verbose_name='Reference Number')), + ('status', django_fsm.FSMField(choices=[('draft', 'Draft'), ('submission', 'Submission Review'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('review', 'Review'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='draft', max_length=30, verbose_name='Status')), + ('not_as_planned', models.BooleanField(default=False, verbose_name='Trip completed not as planned')), + ('title', models.CharField(blank=True, max_length=120, verbose_name='Title')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), ('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')), ('end_date', models.DateField(blank=True, null=True, verbose_name='End Date')), - ('travel_method', models.CharField(blank=True, max_length=150, verbose_name='Travel Method')), - ('destination', models.CharField(blank=True, max_length=150, verbose_name='Destination')), - ('trip', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='itinerary_items', to='travel.Trip', verbose_name='Trip')), + ('additional_notes', models.TextField(blank=True, null=True, verbose_name='Description')), + ('user_info_text', models.JSONField(blank=True, default=dict, verbose_name='User Information Text')), + ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.office', verbose_name='Office')), + ('section', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.section', verbose_name='Section')), ], options={ - 'verbose_name': 'Itinerary Item', - 'verbose_name_plural': 'Itinerary Items', + 'verbose_name': 'Trip', + 'verbose_name_plural': 'Trips', + 'ordering': ('-start_date',), }, ), migrations.CreateModel( - name='Activity', + name='TripStatusHistory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('activity_date', models.DateField(verbose_name='Activity Date')), - ('activity_type', models.CharField(blank=True, choices=[('Monitoring Activity', 'Monitoring Activity'), ('Technical Support', 'Technical Support'), ('Meeting', 'Meeting'), ('Staff Development', 'Staff Development'), ('Staff Entitlement', 'Staff Entitlement')], default='Monitoring Activity', max_length=64, verbose_name='Activity Type')), - ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trip_activities', to='locations.Location')), - ('monitoring_activity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trip_activities', to='field_monitoring_planning.MonitoringActivity')), - ('partner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trip_activities', to='partners.PartnerOrganization')), - ('section', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trip_activities', to='reports.Section')), - ('trip', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='travel.Trip', verbose_name='Trip')), + ('status', models.CharField(choices=[('draft', 'Draft'), ('submission', 'Submission Review'), ('submitted', 'Submitted'), ('rejected', 'Rejected'), ('approved', 'Approved'), ('review', 'Review'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], max_length=30)), + ('comment', models.TextField(blank=True)), + ('trip', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='status_history', to='travel.trip', verbose_name='Trip')), ], options={ - 'verbose_name': 'Activity', - 'verbose_name_plural': 'Activities', - 'ordering': ['-activity_date'], + 'verbose_name': 'Trip Status History', + 'verbose_name_plural': 'Trip Status History', + 'ordering': ('-created',), }, ), ] diff --git a/src/etools/applications/travel/migrations/0002_initial.py b/src/etools/applications/travel/migrations/0002_initial.py new file mode 100644 index 0000000000..da7843a1f0 --- /dev/null +++ b/src/etools/applications/travel/migrations/0002_initial.py @@ -0,0 +1,72 @@ +# Generated by Django 3.2.19 on 2024-07-19 11:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('partners', '0002_initial'), + ('reports', '0002_initial'), + ('field_monitoring_planning', '0003_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('locations', '0001_initial'), + ('travel', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='trip', + name='supervisor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supervised_itineraries', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor'), + ), + migrations.AddField( + model_name='trip', + name='traveller', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='itineraries', to=settings.AUTH_USER_MODEL, verbose_name='Traveller'), + ), + migrations.AddField( + model_name='report', + name='trip', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='report', to='travel.trip', verbose_name='Trip'), + ), + migrations.AddField( + model_name='itineraryitem', + name='monitoring_activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_itinerary_items', to='field_monitoring_planning.monitoringactivity'), + ), + migrations.AddField( + model_name='itineraryitem', + name='trip', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='itinerary_items', to='travel.trip', verbose_name='Trip'), + ), + migrations.AddField( + model_name='activity', + name='location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='trip_activities', to='locations.location'), + ), + migrations.AddField( + model_name='activity', + name='monitoring_activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_activities', to='field_monitoring_planning.monitoringactivity'), + ), + migrations.AddField( + model_name='activity', + name='partner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_activities', to='partners.partnerorganization'), + ), + migrations.AddField( + model_name='activity', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trip_activities', to='reports.section'), + ), + migrations.AddField( + model_name='activity', + name='trip', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='travel.trip', verbose_name='Trip'), + ), + ] diff --git a/src/etools/applications/travel/migrations/0002_itineraryitem_monitoring_activity.py b/src/etools/applications/travel/migrations/0002_itineraryitem_monitoring_activity.py deleted file mode 100644 index 83942407fc..0000000000 --- a/src/etools/applications/travel/migrations/0002_itineraryitem_monitoring_activity.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-11 23:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0009_auto_20210318_2046'), - ('travel', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='itineraryitem', - name='monitoring_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_itinerary_items', to='field_monitoring_planning.MonitoringActivity'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0003_trip_user_info_text.py b/src/etools/applications/travel/migrations/0003_trip_user_info_text.py deleted file mode 100644 index 7dab3508a8..0000000000 --- a/src/etools/applications/travel/migrations/0003_trip_user_info_text.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-15 01:03 - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('travel', '0002_itineraryitem_monitoring_activity'), - ] - - operations = [ - migrations.AddField( - model_name='trip', - name='user_info_text', - field=models.JSONField(default=dict, verbose_name='User Information Text'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0004_trip_additional_notes.py b/src/etools/applications/travel/migrations/0004_trip_additional_notes.py deleted file mode 100644 index a5aef059a2..0000000000 --- a/src/etools/applications/travel/migrations/0004_trip_additional_notes.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-15 20:40 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('travel', '0003_trip_user_info_text'), - ] - - operations = [ - migrations.AddField( - model_name='trip', - name='additional_notes', - field=models.TextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0005_auto_20210617_0044.py b/src/etools/applications/travel/migrations/0005_auto_20210617_0044.py deleted file mode 100644 index d54be1f7aa..0000000000 --- a/src/etools/applications/travel/migrations/0005_auto_20210617_0044.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.7 on 2021-06-17 00:44 - -import django.contrib.postgres.fields.jsonb -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('travel', '0004_trip_additional_notes'), - ] - - operations = [ - migrations.AlterModelOptions( - name='trip', - options={'ordering': ('-start_date',), 'verbose_name': 'Trip', 'verbose_name_plural': 'Trips'}, - ), - migrations.AlterField( - model_name='trip', - name='user_info_text', - field=models.JSONField(blank=True, default=dict, verbose_name='User Information Text'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0006_trip_not_as_planned.py b/src/etools/applications/travel/migrations/0006_trip_not_as_planned.py deleted file mode 100644 index a8c826e5de..0000000000 --- a/src/etools/applications/travel/migrations/0006_trip_not_as_planned.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-03-07 13:56 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('travel', '0005_auto_20210617_0044'), - ] - - operations = [ - migrations.AddField( - model_name='trip', - name='not_as_planned', - field=models.BooleanField(default=False, verbose_name='Trip completed not as planned'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0007_auto_20220405_0916.py b/src/etools/applications/travel/migrations/0007_auto_20220405_0916.py deleted file mode 100644 index 8b5c17dc54..0000000000 --- a/src/etools/applications/travel/migrations/0007_auto_20220405_0916.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-05 09:16 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('field_monitoring_planning', '0012_auto_20210709_1455'), - ('partners', '0049_alter_interventionresultlink_unique_together'), - ('locations', '0001_initial'), - ('travel', '0006_trip_not_as_planned'), - ] - - operations = [ - migrations.AlterField( - model_name='activity', - name='location', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='trip_activities', to='locations.location'), - ), - migrations.AlterField( - model_name='activity', - name='monitoring_activity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_activities', to='field_monitoring_planning.monitoringactivity'), - ), - migrations.AlterField( - model_name='activity', - name='partner', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='trip_activities', to='partners.partnerorganization'), - ), - ] diff --git a/src/etools/applications/travel/migrations/0008_fields_not_mandatory_in_draft.py b/src/etools/applications/travel/migrations/0008_fields_not_mandatory_in_draft.py deleted file mode 100644 index 9decc54410..0000000000 --- a/src/etools/applications/travel/migrations/0008_fields_not_mandatory_in_draft.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-05 09:29 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('reports', '0027_auto_20210714_2147'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('travel', '0007_auto_20220405_0916'), - ] - - operations = [ - migrations.AlterField( - model_name='trip', - name='description', - field=models.TextField(blank=True, null=True, verbose_name='Description'), - ), - migrations.AlterField( - model_name='trip', - name='office', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.office', verbose_name='Office'), - ), - migrations.AlterField( - model_name='trip', - name='section', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='trips', to='reports.section', verbose_name='Section'), - ), - migrations.AlterField( - model_name='trip', - name='supervisor', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supervised_itineraries', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor'), - ), - ] diff --git a/src/etools/applications/users/migrations/0001_initial.py b/src/etools/applications/users/migrations/0001_initial.py index be970aae20..26fe7b6eb5 100644 --- a/src/etools/applications/users/migrations/0001_initial.py +++ b/src/etools/applications/users/migrations/0001_initial.py @@ -1,13 +1,14 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 from decimal import Decimal - -import django.core.validators -import django.db.models.deletion from django.conf import settings +import django.core.validators from django.db import migrations, models - +import django.db.models.deletion +import django.utils.timezone import django_tenants.postgresql_backend.base +import etools.applications.users.models +import model_utils.fields class Migration(migrations.Migration): @@ -15,39 +16,63 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('publics', '0001_initial'), + ('auth', '0012_alter_user_first_name_max_length'), + ('organizations', '0001_initial'), ] operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('username', models.CharField(max_length=256, unique=True, verbose_name='username')), + ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('middle_name', models.CharField(blank=True, max_length=50, verbose_name='middle_name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_active', models.BooleanField(default=True, verbose_name='active')), + ('is_staff', models.BooleanField(default=False, verbose_name='staff')), + ('is_superuser', models.BooleanField(default=False, verbose_name='superuser')), + ('preferences', models.JSONField(default=etools.applications.users.models.preferences_default_dict)), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'db_table': 'auth_user', + 'ordering': ['first_name'], + }, + managers=[ + ('objects', etools.applications.users.models.UsersManager()), + ], + ), migrations.CreateModel( name='Country', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('domain_url', models.CharField(max_length=128, unique=True)), - ('schema_name', models.CharField(max_length=63, unique=True, validators=[ - django_tenants.postgresql_backend.base._check_schema_name])), + ('schema_name', models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])), ('name', models.CharField(max_length=100, verbose_name='Name')), - ('country_short_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Short Code')), - ('long_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Long Name')), - ('business_area_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Business Area Code')), - ('latitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[ - django.core.validators.MinValueValidator(Decimal('-90')), django.core.validators.MaxValueValidator(Decimal('90'))], verbose_name='Latitude')), - ('longitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[django.core.validators.MinValueValidator( - Decimal('-180')), django.core.validators.MaxValueValidator(Decimal('180'))], verbose_name='Longitude')), + ('country_short_code', models.CharField(blank=True, default='', max_length=10, verbose_name='UNICEF Country Reference Code')), + ('iso3_code', models.CharField(blank=True, default='', max_length=10, verbose_name='ISO3 Code')), + ('long_name', models.CharField(blank=True, default='', max_length=255, verbose_name='Long Name')), + ('business_area_code', models.CharField(blank=True, default='', max_length=10, verbose_name='Business Area Code')), + ('latitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[django.core.validators.MinValueValidator(Decimal('-90')), django.core.validators.MaxValueValidator(Decimal('90'))], verbose_name='Latitude')), + ('longitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[django.core.validators.MinValueValidator(Decimal('-180')), django.core.validators.MaxValueValidator(Decimal('180'))], verbose_name='Longitude')), ('initial_zoom', models.IntegerField(default=8, verbose_name='Initial Zoom')), ('vision_sync_enabled', models.BooleanField(default=True, verbose_name='Vision Sync Enabled')), ('vision_last_synced', models.DateTimeField(blank=True, null=True, verbose_name='Vision Last Sync')), - ('threshold_tre_usd', models.DecimalField(decimal_places=4, default=None, - max_digits=20, null=True, verbose_name='Threshold TRE (USD)')), - ('threshold_tae_usd', models.DecimalField(decimal_places=4, default=None, - max_digits=20, null=True, verbose_name='Threshold TAE (USD)')), - ('local_currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - related_name='workspaces', to='publics.Currency', verbose_name='Local Currency')), + ('custom_dashboards', models.JSONField(default=etools.applications.users.models.custom_dashboards_default, verbose_name='Custom Dashboards')), + ('local_currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workspaces', to='publics.currency', verbose_name='Local Currency')), ], options={ - 'ordering': ['name'], 'verbose_name_plural': 'Countries', + 'ordering': ['name'], }, ), migrations.CreateModel( @@ -55,19 +80,19 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=254, verbose_name='Name')), - ('zonal_chief', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='offices', to=settings.AUTH_USER_MODEL, verbose_name='Chief')), + ('zonal_chief', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='offices_old', to=settings.AUTH_USER_MODEL, verbose_name='Chief')), ], options={ 'ordering': ('name',), }, ), migrations.CreateModel( - name='Section', + name='WorkspaceCounter', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), - ('code', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Code')), + ('travel_reference_number_counter', models.PositiveIntegerField(default=1, verbose_name='Travel Reference Number Counter')), + ('travel_invoice_reference_number_counter', models.PositiveIntegerField(default=1, verbose_name='Travel Invoice Reference Number Counter')), + ('workspace', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='counters', to='users.country', verbose_name='Workspace')), ], ), migrations.CreateModel( @@ -75,48 +100,69 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('guid', models.CharField(max_length=40, null=True, unique=True, verbose_name='GUID')), - ('partner_staff_member', models.IntegerField(blank=True, null=True, verbose_name='Partner Staff Member')), + ('_partner_staff_member', models.IntegerField(blank=True, null=True, verbose_name='Partner Staff Member')), ('job_title', models.CharField(blank=True, max_length=255, null=True, verbose_name='Job Title')), - ('phone_number', models.CharField(blank=True, max_length=20, null=True, verbose_name='Phone Number')), - ('staff_id', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Staff ID')), + ('phone_number', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone Number')), + ('staff_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='Staff ID')), ('org_unit_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Org Unit Code')), ('org_unit_name', models.CharField(blank=True, max_length=64, null=True, verbose_name='Org Unit Name')), ('post_number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Post Number')), ('post_title', models.CharField(blank=True, max_length=64, null=True, verbose_name='Post Title')), - ('vendor_number', models.CharField(blank=True, max_length=32, - null=True, unique=True, verbose_name='Vendor Number')), - ('section_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Section Code')), - ('countries_available', models.ManyToManyField(blank=True, - related_name='accessible_by', to='users.Country', verbose_name='Countries Available')), - ('country', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='users.Country', verbose_name='Country')), - ('country_override', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='country_override', to='users.Country', verbose_name='Country Override')), - ('office', models.ForeignKey(blank=True, null=True, - on_delete=django.db.models.deletion.CASCADE, to='users.Office', verbose_name='Office')), - ('oic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - to=settings.AUTH_USER_MODEL, verbose_name='OIC')), - ('supervisor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - related_name='supervisee', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='profile', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ('vendor_number', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Vendor Number')), + ('receive_tpm_notifications', models.BooleanField(default=False, verbose_name='Receive Notifications on TPM Tasks')), + ('country', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.country', verbose_name='Country')), + ('country_override', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='country_override', to='users.country', verbose_name='Country Override')), + ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.office', verbose_name='Office')), + ('oic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='OIC')), + ('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='organizations.organization', verbose_name='Current Organization')), + ('supervisor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='supervisee', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL, verbose_name='User')), ], + options={ + 'verbose_name_plural': 'User Profile', + }, ), migrations.CreateModel( - name='WorkspaceCounter', + name='StagedUser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_json', models.JSONField()), + ('request_state', models.CharField(choices=[('pending', 'Pending'), ('accepted', 'Accepted'), ('declined', 'Declined')], default='pending', max_length=10)), + ('state_timestamp', models.DateTimeField(auto_now=True, verbose_name='state timestamp')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.country')), + ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organizations.organization')), + ('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='requested_users', to=settings.AUTH_USER_MODEL)), + ('reviewer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_users', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Realm', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('travel_reference_number_counter', models.PositiveIntegerField( - default=1, verbose_name='Travel Reference Number Counter')), - ('travel_invoice_reference_number_counter', models.PositiveIntegerField( - default=1, verbose_name='Travel Invoice Reference Number Counter')), - ('workspace', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, - related_name='counters', to='users.Country', verbose_name='Workspace')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('is_active', models.BooleanField(default=True, verbose_name='Active')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realms', to='users.country', verbose_name='Country')), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realms', to='auth.group', verbose_name='Group')), + ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realms', to='organizations.organization', verbose_name='Organization')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realms', to=settings.AUTH_USER_MODEL, verbose_name='User')), ], + options={ + 'verbose_name': 'Realm', + 'verbose_name_plural': 'Realms', + }, ), migrations.AddField( model_name='country', name='offices', - field=models.ManyToManyField(related_name='offices', to='users.Office', verbose_name='Offices'), + field=models.ManyToManyField(blank=True, related_name='offices', to='users.Office', verbose_name='Offices'), + ), + migrations.AddIndex( + model_name='realm', + index=models.Index(fields=['user', 'country', 'organization'], name='users_realm_user_id_ff2701_idx'), + ), + migrations.AddConstraint( + model_name='realm', + constraint=models.UniqueConstraint(fields=('user', 'country', 'organization', 'group'), name='unique_realm'), ), ] diff --git a/src/etools/applications/users/migrations/0001_squashed_0007_user.py b/src/etools/applications/users/migrations/0001_squashed_0007_user.py deleted file mode 100644 index 228c72fc60..0000000000 --- a/src/etools/applications/users/migrations/0001_squashed_0007_user.py +++ /dev/null @@ -1,227 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-27 10:25 -from __future__ import unicode_literals - -from decimal import Decimal - -import django.contrib.auth.models -import django.core.validators -import django.db.migrations.operations.special -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - -import django_tenants.postgresql_backend.base - - -class Migration(migrations.Migration): - - replaces = [('users', '0001_initial'), ('users', '0002_auto_20180329_2123'), ('users', '0003_fix_null_values'), ('users', '0004_make_not_nullable'), ('users', '0005_auto_20180419_2113'), ('users', '0006_auto_20180423_1515'), ('users', '0007_user')] - - initial = True - - dependencies = [ - ('publics', '0001_initial'), - ('auth', '0008_alter_user_username_max_length'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('username', models.CharField(max_length=256, unique=True, verbose_name='username')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')), - ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_active', models.BooleanField(default=True, verbose_name='active')), - ('is_staff', models.BooleanField(default=False, verbose_name='staff')), - ('is_superuser', models.BooleanField(default=False, verbose_name='superuser')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'db_table': 'auth_user', - 'ordering': ['first_name'], - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - migrations.CreateModel( - name='Country', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('domain_url', models.CharField(max_length=128, unique=True)), - ('schema_name', models.CharField(max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])), - ('name', models.CharField(max_length=100, verbose_name='Name')), - ('country_short_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Short Code')), - ('long_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Long Name')), - ('business_area_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Business Area Code')), - ('latitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[django.core.validators.MinValueValidator(Decimal('-90')), django.core.validators.MaxValueValidator(Decimal('90'))], verbose_name='Latitude')), - ('longitude', models.DecimalField(blank=True, decimal_places=5, max_digits=8, null=True, validators=[django.core.validators.MinValueValidator(Decimal('-180')), django.core.validators.MaxValueValidator(Decimal('180'))], verbose_name='Longitude')), - ('initial_zoom', models.IntegerField(default=8, verbose_name='Initial Zoom')), - ('vision_sync_enabled', models.BooleanField(default=True, verbose_name='Vision Sync Enabled')), - ('vision_last_synced', models.DateTimeField(blank=True, null=True, verbose_name='Vision Last Sync')), - ('threshold_tre_usd', models.DecimalField(decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Threshold TRE (USD)')), - ('threshold_tae_usd', models.DecimalField(decimal_places=4, default=None, max_digits=20, null=True, verbose_name='Threshold TAE (USD)')), - ('local_currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workspaces', to='publics.Currency', verbose_name='Local Currency')), - ], - options={ - 'ordering': ['name'], - 'verbose_name_plural': 'Countries', - }, - ), - migrations.CreateModel( - name='Office', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=254, verbose_name='Name')), - ('zonal_chief', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='offices', to=settings.AUTH_USER_MODEL, verbose_name='Chief')), - ], - options={ - 'ordering': ('name',), - }, - ), - migrations.CreateModel( - name='Section', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), - ('code', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Code')), - ], - ), - migrations.CreateModel( - name='UserProfile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('guid', models.CharField(max_length=40, null=True, unique=True, verbose_name='GUID')), - ('partner_staff_member', models.IntegerField(blank=True, null=True, verbose_name='Partner Staff Member')), - ('job_title', models.CharField(blank=True, max_length=255, null=True, verbose_name='Job Title')), - ('phone_number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone Number')), - ('staff_id', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Staff ID')), - ('org_unit_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Org Unit Code')), - ('org_unit_name', models.CharField(blank=True, max_length=64, null=True, verbose_name='Org Unit Name')), - ('post_number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Post Number')), - ('post_title', models.CharField(blank=True, max_length=64, null=True, verbose_name='Post Title')), - ('vendor_number', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Vendor Number')), - ('section_code', models.CharField(blank=True, max_length=32, null=True, verbose_name='Section Code')), - ('countries_available', models.ManyToManyField(blank=True, related_name='accessible_by', to='users.Country', verbose_name='Countries Available')), - ('country', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.Country', verbose_name='Country')), - ('country_override', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='country_override', to='users.Country', verbose_name='Country Override')), - ('office', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.Office', verbose_name='Office')), - ('oic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='OIC')), - ('supervisor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='supervisee', to=settings.AUTH_USER_MODEL, verbose_name='Supervisor')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - ), - migrations.CreateModel( - name='WorkspaceCounter', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('travel_reference_number_counter', models.PositiveIntegerField(default=1, verbose_name='Travel Reference Number Counter')), - ('travel_invoice_reference_number_counter', models.PositiveIntegerField(default=1, verbose_name='Travel Invoice Reference Number Counter')), - ('workspace', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='counters', to='users.Country', verbose_name='Workspace')), - ], - ), - migrations.AddField( - model_name='country', - name='offices', - field=models.ManyToManyField(related_name='offices', to='users.Office', verbose_name='Offices'), - ), - migrations.AlterField( - model_name='country', - name='business_area_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Business Area Code'), - ), - migrations.AlterField( - model_name='country', - name='country_short_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Short Code'), - ), - migrations.AlterField( - model_name='country', - name='long_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Long Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='job_title', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Job Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Org Unit Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_name', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Org Unit Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='phone_number', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_number', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Post Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_title', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Post Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='section_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Section Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='job_title', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Job Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_code', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Org Unit Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_name', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Org Unit Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='phone_number', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_number', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Post Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_title', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Post Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='section_code', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Section Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='staff_id', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Staff ID'), - ), - ] diff --git a/src/etools/applications/users/migrations/0002_auto_20180329_2123.py b/src/etools/applications/users/migrations/0002_auto_20180329_2123.py deleted file mode 100644 index 2a2f95b5bd..0000000000 --- a/src/etools/applications/users/migrations/0002_auto_20180329_2123.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-03-29 21:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='userprofile', - name='phone_number', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone Number'), - ), - ] diff --git a/src/etools/applications/users/migrations/0002_auto_20180424_1740.py b/src/etools/applications/users/migrations/0002_auto_20180424_1740.py deleted file mode 100644 index 13d9c3d998..0000000000 --- a/src/etools/applications/users/migrations/0002_auto_20180424_1740.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-24 17:40 -from __future__ import unicode_literals - -from django.db import migrations, models -from django.db.models import Count - - -def mark_duplicates(apps, schema_editor): - User = apps.get_model("users", "user") - dupe_emails = set(User.objects.values_list("email", flat=True).annotate( - Count("id") - ).order_by().filter(id__count__gt=1)) - for email in dupe_emails: - user = User.objects.filter(email=email).last() - user.email = "duplicate-{}".format(email) - user.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0001_squashed_0007_user'), - ] - - operations = [ - migrations.RunPython( - mark_duplicates, - reverse_code=migrations.RunPython.noop - ), - migrations.AlterField( - model_name='user', - name='email', - field=models.EmailField(max_length=254, unique=True, verbose_name='email address'), - ), - ] diff --git a/src/etools/applications/users/migrations/0003_auto_20180703_1729.py b/src/etools/applications/users/migrations/0003_auto_20180703_1729.py deleted file mode 100644 index 93d22e3bbf..0000000000 --- a/src/etools/applications/users/migrations/0003_auto_20180703_1729.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-03 17:29 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0002_auto_20180424_1740'), - ] - - operations = [ - migrations.RemoveField( - model_name='userprofile', - name='section_code', - ), - ] diff --git a/src/etools/applications/users/migrations/0003_fix_null_values.py b/src/etools/applications/users/migrations/0003_fix_null_values.py deleted file mode 100644 index bbbf81f743..0000000000 --- a/src/etools/applications/users/migrations/0003_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0002_auto_20180329_2123'), - ] - - operations = [ - ] diff --git a/src/etools/applications/users/migrations/0004_delete_section.py b/src/etools/applications/users/migrations/0004_delete_section.py deleted file mode 100644 index c940ea84e3..0000000000 --- a/src/etools/applications/users/migrations/0004_delete_section.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-16 16:25 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0003_auto_20180703_1729'), - ] - - operations = [ - migrations.DeleteModel( - name='Section', - ), - ] diff --git a/src/etools/applications/users/migrations/0004_make_not_nullable.py b/src/etools/applications/users/migrations/0004_make_not_nullable.py deleted file mode 100644 index 19495dd58d..0000000000 --- a/src/etools/applications/users/migrations/0004_make_not_nullable.py +++ /dev/null @@ -1,63 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0003_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='country', - name='business_area_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Business Area Code'), - ), - migrations.AlterField( - model_name='country', - name='country_short_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='Short Code'), - ), - migrations.AlterField( - model_name='country', - name='long_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Long Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='job_title', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Job Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Org Unit Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_name', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Org Unit Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='phone_number', - field=models.CharField(blank=True, default='', max_length=20, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_number', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Post Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_title', - field=models.CharField(blank=True, default='', max_length=64, verbose_name='Post Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='section_code', - field=models.CharField(blank=True, default='', max_length=32, verbose_name='Section Code'), - ), - ] diff --git a/src/etools/applications/users/migrations/0005_auto_20180419_2113.py b/src/etools/applications/users/migrations/0005_auto_20180419_2113.py deleted file mode 100644 index 5420ea9351..0000000000 --- a/src/etools/applications/users/migrations/0005_auto_20180419_2113.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-19 21:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0004_make_not_nullable'), - ] - - operations = [ - migrations.AlterField( - model_name='userprofile', - name='job_title', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Job Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_code', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Org Unit Code'), - ), - migrations.AlterField( - model_name='userprofile', - name='org_unit_name', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Org Unit Name'), - ), - migrations.AlterField( - model_name='userprofile', - name='phone_number', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_number', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Post Number'), - ), - migrations.AlterField( - model_name='userprofile', - name='post_title', - field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Post Title'), - ), - migrations.AlterField( - model_name='userprofile', - name='section_code', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Section Code'), - ), - ] diff --git a/src/etools/applications/users/migrations/0005_user_middle_name.py b/src/etools/applications/users/migrations/0005_user_middle_name.py deleted file mode 100644 index d560c0b4d7..0000000000 --- a/src/etools/applications/users/migrations/0005_user_middle_name.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 1.10.8 on 2018-07-26 11:57 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0004_delete_section'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='middle_name', - field=models.CharField(blank=True, max_length=50, verbose_name='middle_name'), - ), - ] diff --git a/src/etools/applications/users/migrations/0006_auto_20180423_1515.py b/src/etools/applications/users/migrations/0006_auto_20180423_1515.py deleted file mode 100644 index 503f672e9d..0000000000 --- a/src/etools/applications/users/migrations/0006_auto_20180423_1515.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-23 15:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0005_auto_20180419_2113'), - ] - - operations = [ - migrations.AlterField( - model_name='userprofile', - name='staff_id', - field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Staff ID'), - ), - ] diff --git a/src/etools/applications/users/migrations/0006_auto_20181016_1319.py b/src/etools/applications/users/migrations/0006_auto_20181016_1319.py deleted file mode 100644 index 5a96c7ded3..0000000000 --- a/src/etools/applications/users/migrations/0006_auto_20181016_1319.py +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Django 2.0.9 on 2018-10-16 13:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0005_user_middle_name'), - ] - - operations = [ - ] diff --git a/src/etools/applications/users/migrations/0007_remove_country_domain_url.py b/src/etools/applications/users/migrations/0007_remove_country_domain_url.py deleted file mode 100644 index abfc2d51c5..0000000000 --- a/src/etools/applications/users/migrations/0007_remove_country_domain_url.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.9 on 2018-10-16 13:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0006_auto_20181016_1319'), - ] - - operations = [ - migrations.RemoveField( - model_name='country', - name='domain_url', - ), - ] diff --git a/src/etools/applications/users/migrations/0007_user.py b/src/etools/applications/users/migrations/0007_user.py deleted file mode 100644 index a5d127539a..0000000000 --- a/src/etools/applications/users/migrations/0007_user.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 1.10.8 on 2018-04-24 17:35 - -import django.contrib.auth.models -from django.db import migrations, models - - -class FakeCreateModel(migrations.CreateModel): - def database_forwards(self, app_label, schema_editor, from_state, to_state): - model = to_state.apps.get_model(app_label, self.name) - if self.allow_migrate_model(schema_editor.connection.alias, model): - # We do not actually create the model, pseudo fake - pass - - def database_backwards(self, app_label, schema_editor, from_state, to_state): - model = from_state.apps.get_model(app_label, self.name) - if self.allow_migrate_model(schema_editor.connection.alias, model): - # We do not actually remove the model, pseudo fake - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0006_auto_20180423_1515'), - ] - - operations = [ - # Replacing auth_user table, needs to be permanently faked - FakeCreateModel( - name='User', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('username', models.CharField(max_length=256, unique=True, verbose_name='username')), - ('email', models.EmailField(max_length=254, blank=True, verbose_name='email address')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')), - ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_active', models.BooleanField(default=True, verbose_name='active')), - ('is_staff', models.BooleanField(default=False, verbose_name='staff')), - ('is_superuser', models.BooleanField(default=False, verbose_name='superuser')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'db_table': 'auth_user', - 'ordering': ['first_name'], - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - ] diff --git a/src/etools/applications/users/migrations/0008_auto_20190111_1525.py b/src/etools/applications/users/migrations/0008_auto_20190111_1525.py deleted file mode 100644 index 8b774727b3..0000000000 --- a/src/etools/applications/users/migrations/0008_auto_20190111_1525.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-11 15:25 - -import django.utils.timezone -from django.db import migrations - -import model_utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0007_remove_country_domain_url'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='created', - field=model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created'), - ), - migrations.AddField( - model_name='user', - name='modified', - field=model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified'), - ), - ] diff --git a/src/etools/applications/users/migrations/0009_auto_20190122_1412.py b/src/etools/applications/users/migrations/0009_auto_20190122_1412.py deleted file mode 100644 index d5283635de..0000000000 --- a/src/etools/applications/users/migrations/0009_auto_20190122_1412.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.9 on 2019-01-22 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0008_auto_20190111_1525'), - ] - - operations = [ - migrations.AlterModelOptions( - name='userprofile', - options={'verbose_name_plural': 'User Profile'}, - ), - ] diff --git a/src/etools/applications/users/migrations/0010_auto_20190423_1920.py b/src/etools/applications/users/migrations/0010_auto_20190423_1920.py deleted file mode 100644 index 292f3b3f8d..0000000000 --- a/src/etools/applications/users/migrations/0010_auto_20190423_1920.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 2.1.8 on 2019-04-23 19:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0009_auto_20190122_1412'), - ] - - operations = [ - migrations.AlterField( - model_name='country', - name='offices', - field=models.ManyToManyField(blank=True, related_name='offices', to='users.Office', verbose_name='Offices'), - ), - migrations.AlterField( - model_name='country', - name='threshold_tae_usd', - field=models.DecimalField(blank=True, decimal_places=4, max_digits=20, null=True, verbose_name='Threshold TAE (USD)'), - ), - migrations.AlterField( - model_name='country', - name='threshold_tre_usd', - field=models.DecimalField(blank=True, decimal_places=4, max_digits=20, null=True, verbose_name='Threshold TRE (USD)'), - ), - ] diff --git a/src/etools/applications/users/migrations/0011_auto_20190425_1838.py b/src/etools/applications/users/migrations/0011_auto_20190425_1838.py deleted file mode 100644 index d25c20050b..0000000000 --- a/src/etools/applications/users/migrations/0011_auto_20190425_1838.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.1.8 on 2019-04-25 18:38 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0010_auto_20190423_1920'), - ] - - operations = [ - migrations.RemoveField( - model_name='country', - name='threshold_tae_usd', - ), - migrations.RemoveField( - model_name='country', - name='threshold_tre_usd', - ), - ] diff --git a/src/etools/applications/users/migrations/0012_auto_20190513_1804.py b/src/etools/applications/users/migrations/0012_auto_20190513_1804.py deleted file mode 100644 index 8a0450f66a..0000000000 --- a/src/etools/applications/users/migrations/0012_auto_20190513_1804.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.1.8 on 2019-05-13 18:04 - -from django.db import migrations, models -import django_tenants.postgresql_backend.base - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0011_auto_20190425_1838'), - ] - - operations = [ - migrations.AlterField( - model_name='country', - name='schema_name', - field=models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name]), - ), - ] diff --git a/src/etools/applications/users/migrations/0013_auto_20191010_1621.py b/src/etools/applications/users/migrations/0013_auto_20191010_1621.py deleted file mode 100644 index 611e7a99a4..0000000000 --- a/src/etools/applications/users/migrations/0013_auto_20191010_1621.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-10 16:21 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0012_auto_20190513_1804'), - ] - - operations = [ - migrations.AlterField( - model_name='office', - name='zonal_chief', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='offices_old', to=settings.AUTH_USER_MODEL, verbose_name='Chief'), - ), - ] diff --git a/src/etools/applications/users/migrations/0014_auto_20200611_1747.py b/src/etools/applications/users/migrations/0014_auto_20200611_1747.py deleted file mode 100644 index 33f65565f7..0000000000 --- a/src/etools/applications/users/migrations/0014_auto_20200611_1747.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.7 on 2020-06-11 17:47 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0013_auto_20191010_1621'), - ] - - operations = [ - migrations.AddField( - model_name='country', - name='iso3_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='ISO3 Code'), - ), - migrations.AlterField( - model_name='country', - name='country_short_code', - field=models.CharField(blank=True, default='', max_length=10, verbose_name='UNICEF Country Reference Code'), - ), - ] diff --git a/src/etools/applications/users/migrations/0015_auto_20200924_1453.py b/src/etools/applications/users/migrations/0015_auto_20200924_1453.py deleted file mode 100644 index 70c97fd709..0000000000 --- a/src/etools/applications/users/migrations/0015_auto_20200924_1453.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2020-09-24 14:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0014_auto_20200611_1747'), - ] - - operations = [ - migrations.RenameField( - model_name='userprofile', - old_name='partner_staff_member', - new_name='_partner_staff_member', - ), - ] diff --git a/src/etools/applications/users/migrations/0016_auto_20210519_1038.py b/src/etools/applications/users/migrations/0016_auto_20210519_1038.py deleted file mode 100644 index 9e8a33ac9a..0000000000 --- a/src/etools/applications/users/migrations/0016_auto_20210519_1038.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.7 on 2021-05-19 10:38 - -from django.db import migrations - - -def add_secretary_group(apps, schema_editor): - Group = apps.get_model('auth', 'Group') - Group.objects.get_or_create(name='PRC Secretary') - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0015_auto_20200924_1453'), - ('auth', '0011_update_proxy_permissions'), - ] - - operations = [ - migrations.RunPython(add_secretary_group, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/users/migrations/0016_country_custom_dashboards.py b/src/etools/applications/users/migrations/0016_country_custom_dashboards.py deleted file mode 100644 index 636a2ff937..0000000000 --- a/src/etools/applications/users/migrations/0016_country_custom_dashboards.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.24 on 2021-07-14 21:24 - -import django.contrib.postgres.fields.jsonb -from django.db import migrations, models -import etools.applications.users.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0015_auto_20200924_1453'), - ] - - operations = [ - migrations.AddField( - model_name='country', - name='custom_dashboards', - field=models.JSONField(default=etools.applications.users.models.custom_dashboards_default, verbose_name='Custom Dashboards'), - ), - ] diff --git a/src/etools/applications/users/migrations/0017_auto_20220408_1558.py b/src/etools/applications/users/migrations/0017_auto_20220408_1558.py deleted file mode 100644 index 7e0a468069..0000000000 --- a/src/etools/applications/users/migrations/0017_auto_20220408_1558.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.6 on 2022-04-08 15:58 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0016_country_custom_dashboards'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='first_name', - field=models.CharField(blank=True, max_length=150, verbose_name='first name'), - ), - migrations.AlterField( - model_name='user', - name='last_name', - field=models.CharField(blank=True, max_length=150, verbose_name='last name'), - ), - ] diff --git a/src/etools/applications/users/migrations/0017_merge_20210805_1609.py b/src/etools/applications/users/migrations/0017_merge_20210805_1609.py deleted file mode 100644 index a8f0afe2bb..0000000000 --- a/src/etools/applications/users/migrations/0017_merge_20210805_1609.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-05 16:09 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0016_auto_20210519_1038'), - ('users', '0016_country_custom_dashboards'), - ] - - operations = [ - ] diff --git a/src/etools/applications/users/migrations/0018_merge_20220511_1411.py b/src/etools/applications/users/migrations/0018_merge_20220511_1411.py deleted file mode 100644 index 02a941a87e..0000000000 --- a/src/etools/applications/users/migrations/0018_merge_20220511_1411.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.13 on 2022-05-11 14:11 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0017_auto_20220408_1558'), - ('users', '0017_merge_20210805_1609'), - ] - - operations = [ - ] diff --git a/src/etools/applications/users/migrations/0018_user_preferences.py b/src/etools/applications/users/migrations/0018_user_preferences.py deleted file mode 100644 index 6836617889..0000000000 --- a/src/etools/applications/users/migrations/0018_user_preferences.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.6 on 2022-05-30 09:01 - -from django.db import migrations, models -import etools.applications.users.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0017_auto_20220408_1558'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='preferences', - field=models.JSONField(default=etools.applications.users.models.preferences_default_dict), - ), - ] diff --git a/src/etools/applications/users/migrations/0019_merge_0018_merge_20220511_1411_0018_user_preferences.py b/src/etools/applications/users/migrations/0019_merge_0018_merge_20220511_1411_0018_user_preferences.py deleted file mode 100644 index 7475bfeacf..0000000000 --- a/src/etools/applications/users/migrations/0019_merge_0018_merge_20220511_1411_0018_user_preferences.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-05 07:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0018_merge_20220511_1411'), - ('users', '0018_user_preferences'), - ] - - operations = [ - ] diff --git a/src/etools/applications/users/migrations/0020_realms.py b/src/etools/applications/users/migrations/0020_realms.py deleted file mode 100644 index 1a997977de..0000000000 --- a/src/etools/applications/users/migrations/0020_realms.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-17 13:07 -import django.utils.timezone -import model_utils.fields -import etools.applications.users.models - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ('auth', '0012_alter_user_first_name_max_length'), - ('users', '0019_merge_0018_merge_20220511_1411_0018_user_preferences'), - ] - - operations = [ - migrations.CreateModel( - name='Realm', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('is_active', models.BooleanField(default=True, verbose_name='Active')), - ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.country', related_name='realms', verbose_name='Country')), - ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='auth.group', related_name='realms', verbose_name='Group')), - ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organizations.organization', related_name='realms', verbose_name='Organization')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, related_name='realms', verbose_name='User')), - ], - options={ - 'verbose_name': 'Realm', - 'verbose_name_plural': 'Realms', - }, - ), - migrations.AddConstraint( - model_name='realm', - constraint=models.UniqueConstraint(fields=('user', 'country', 'organization', 'group'), name='unique_realm'), - ), - migrations.AddIndex( - model_name='realm', - index=models.Index(fields=['user', 'country', 'organization'], name='users_realm_user_id_ff2701_idx'), - ), - migrations.AlterModelManagers( - name='user', - managers=[ - ('objects', etools.applications.users.models.UsersManager()), - ], - ), - migrations.AddField( - model_name='userprofile', - name='organization', - field=models.ForeignKey(blank=True, null=True, on_delete=models.deletion.CASCADE, to='organizations.organization', verbose_name='Current Organization'), - ), - ] diff --git a/src/etools/applications/users/migrations/0021_migrate_to_realms.py b/src/etools/applications/users/migrations/0021_migrate_to_realms.py deleted file mode 100644 index 0d2f3862cd..0000000000 --- a/src/etools/applications/users/migrations/0021_migrate_to_realms.py +++ /dev/null @@ -1,208 +0,0 @@ -# Generated by Django 3.2.6 on 2022-08-18 09:37 -import sys -import logging - -from django.db import migrations, models, utils - - -def check_user_profile_exists(apps, user): - UserProfile = apps.get_model('users', 'UserProfile') - - if not hasattr(user, 'profile'): - logging.warning(f"User {user.id}: {user.username} has no profile. " - f"Adding a user profile..") - user.profile = UserProfile.objects.create(user=user) - return False - return True - - -def get_user_countries(apps, user): - Country = apps.get_model('users', 'Country') - countries_qs = Country.objects.filter( - models.Q(id=user.profile.country_id) | - models.Q(id=user.profile.country_override_id) | - models.Q(id__in=user.profile.countries_available.values_list('pk', flat=True)) - ).exclude(name__in=['Global']) - return countries_qs - - -def set_user_country_to_uat(user, uat_country): - # If the user has no country set, add UAT to country and deactivate the user..") - user.profile.country = uat_country - user.profile.country_override = uat_country - user.profile.save(update_fields=['country_override']) - user.profile.countries_available.add(uat_country) - - user.is_active = False - user.save(update_fields=['is_active']) - - -def fwd_migrate_to_user_realms(apps, schema_editor): - # Don't run migration when testing - if "test" in sys.argv: - return - User = apps.get_model('users', 'User') - Realm = apps.get_model('users', 'Realm') - Country = apps.get_model('users', 'Country') - Group = apps.get_model('auth', 'Group') - Organization = apps.get_model('organizations', 'Organization') - - no_profile, no_countries, no_realms = 0, 0, 0 - unicef_org, _ = Organization.objects.get_or_create( - name='UNICEF', - vendor_number='000', - defaults={ - 'organization_type': 'UN Agency', - 'cso_type': 'International' - } - ) - external_psea_org, _ = Organization.objects.get_or_create( - name='EXTERNAL PSEA ASSESSORS', - vendor_number='EXTERNAL PSEA ASSESSORS', - ) - uat_country = Country.objects.get(name='UAT') - - unicef_user_group, _ = Group.objects.get_or_create(name="UNICEF User") - external_psea_group, _ = Group.objects.get_or_create(name="PSEA Assessor") - auditor_group, _ = Group.objects.get_or_create(name="Auditor") - tpm_group, _ = Group.objects.get_or_create(name="Third Party Monitor") - ip_viewer_group, _ = Group.objects.get_or_create(name="IP Viewer") - - logging.info(f'Processing {User.objects.count()} users..') - - for user in User.objects.all() \ - .select_related('profile', 'profile__country', 'profile__country_override', - 'purchase_order_auditorstaffmember', - 'tpmpartners_tpmpartnerstaffmember') \ - .prefetch_related('groups', 'profile__countries_available'): - - if not check_user_profile_exists(apps, user): - no_profile += 1 - - countries = list(get_user_countries(apps, user)) - if not countries: - set_user_country_to_uat(user, uat_country) - no_countries += 1 - - groups = list(user.groups.all()) - is_unicef_user = user.groups.filter(name__contains='UNICEF').count() > 0 or user.email.endswith('@unicef.org') - auditor_staff = hasattr(user, 'purchase_order_auditorstaffmember') and user.purchase_order_auditorstaffmember - tpm_staff = hasattr(user, 'tpmpartners_tpmpartnerstaffmember') and user.tpmpartners_tpmpartnerstaffmember - - realm_list = [] - - if is_unicef_user: - for country in countries: - for group in groups + [unicef_user_group]: - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=unicef_org.id, - group_id=group.id, - is_active=user.is_active - )) - - if auditor_staff and not is_unicef_user: - auditor_organization = auditor_staff.auditor_firm.organization - if not auditor_organization: - logging.info( - f"Auditor Firm with id:{auditor_staff.auditor_firm.id} for staff user {user.id} " - f"has no organization set. Skipping..") - else: - for country in countries: - # Add Auditor in realms - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=auditor_organization.id, - group_id=auditor_group.id, - is_active=not auditor_staff.hidden - )) - - if tpm_staff and not is_unicef_user: - tpm_organization = tpm_staff.tpm_partner.organization - if not tpm_organization: - logging.info( - f"TPM Partner with id:{tpm_staff.tpm_partner.id} for staff user {user.id} " - f"has no organization set. Skipping..") - else: - for country in countries: - # add Third Party Monitor in realms - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=tpm_organization.id, - group_id=tpm_group.id, - is_active=user.is_active - )) - - # assign external psea group even for partner staff members since we cannot access tenants from here. - # partners.0108 will remove this group if staff member exists - if not any([is_unicef_user, auditor_staff, tpm_staff]): - for country in countries: - realm_list.append(dict( - user_id=user.id, - country_id=country.id, - organization_id=external_psea_org.id, - group_id=external_psea_group.id, - is_active=user.is_active - )) - - if user.profile.country: - user_active_country = user.profile.country - else: - user_active_country = user.profile.country_override - - if not realm_list: - logging.info(f'No realms available for user {user.id} on country: {user_active_country.name}') - no_realms += 1 - else: - unique_realms = [dict(t) for t in {tuple(sorted(d.items())) for d in realm_list}] - Realm.objects.bulk_create([Realm(**realm_dict) for realm_dict in unique_realms]) - # update user profile with organization from current country - active_country_realm = user.realms.filter(country=user_active_country).first() - if active_country_realm is None: - # update user profile with organization from last realm - user.profile.organization = Organization.objects.get(id=unique_realms[-1]['organization_id']) - else: - user.profile.organization = active_country_realm.organization - user.profile.save(update_fields=['organization']) - - logging.info(f'{no_realms} users had no realms created because they are on Global country ' - f'or the organization of the partner where is staff is None - no vendor_number') - logging.info(f'{no_profile} users had no profile.') - logging.info(f'{no_countries} users that had no countries set, were added to UAT.') - - -class Migration(migrations.Migration): - - dependencies = [ - ('purchase_order', '0011_alter_auditorfirm_organization'), - ('tpmpartners', '0009_alter_tpmpartner_organization'), - ('users', '0020_realms'), - ] - - operations = [ - # migrations.RunPython(fwd_migrate_to_user_realms, migrations.RunPython.noop), - - migrations.RenameField( - model_name='user', - old_name='groups', - new_name='old_groups', - ), - migrations.AlterField( - model_name='user', - name='old_groups', - field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='Old Groups'), - ), - migrations.RenameField( - model_name='userprofile', - old_name='countries_available', - new_name='old_countries_available', - ), - migrations.AlterField( - model_name='userprofile', - name='old_countries_available', - field=models.ManyToManyField(blank=True, related_name='accessible_by', to='users.Country', verbose_name='Old Countries Available'), - ), - ] diff --git a/src/etools/applications/users/migrations/0022_userprofile_receive_tpm_notifications.py b/src/etools/applications/users/migrations/0022_userprofile_receive_tpm_notifications.py deleted file mode 100644 index d8c854ec34..0000000000 --- a/src/etools/applications/users/migrations/0022_userprofile_receive_tpm_notifications.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.6 on 2022-12-15 05:16 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0021_migrate_to_realms'), - ] - - operations = [ - migrations.AddField( - model_name='userprofile', - name='receive_tpm_notifications', - field=models.BooleanField(default=False, verbose_name='Receive Notifications on TPM Tasks'), - ), - ] diff --git a/src/etools/applications/users/migrations/0023_alter_user_managers.py b/src/etools/applications/users/migrations/0023_alter_user_managers.py deleted file mode 100644 index 5fcb97944f..0000000000 --- a/src/etools/applications/users/migrations/0023_alter_user_managers.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.6 on 2023-05-22 11:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0022_userprofile_receive_tpm_notifications'), - ] - - operations = [ - migrations.RunPython(migrations.RunPython.noop, migrations.RunPython.noop) - ] diff --git a/src/etools/applications/users/migrations/0024_stageduser.py b/src/etools/applications/users/migrations/0024_stageduser.py deleted file mode 100644 index 7783ddb94f..0000000000 --- a/src/etools/applications/users/migrations/0024_stageduser.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.6 on 2023-06-29 14:22 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0002_alter_organization_cso_type'), - ('users', '0023_alter_user_managers'), - ] - - operations = [ - migrations.CreateModel( - name='StagedUser', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('user_json', models.JSONField()), - ('request_state', models.CharField(choices=[('pending', 'Pending'), ('accepted', 'Accepted'), ('declined', 'Declined')], default='pending', max_length=10)), - ('state_timestamp', models.DateTimeField(auto_now=True, verbose_name='state timestamp')), - ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.country')), - ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organizations.organization')), - ('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='requested_users', to=settings.AUTH_USER_MODEL)), - ('reviewer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_users', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/src/etools/applications/users/migrations/0025_auto_20230814_1058.py b/src/etools/applications/users/migrations/0025_auto_20230814_1058.py deleted file mode 100644 index 1de8b2d50b..0000000000 --- a/src/etools/applications/users/migrations/0025_auto_20230814_1058.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.19 on 2023-08-14 10:58 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0024_stageduser'), - ] - - operations = [ - migrations.RemoveField( - model_name='user', - name='old_groups', - ), - migrations.RemoveField( - model_name='userprofile', - name='old_countries_available', - ), - ] diff --git a/src/etools/applications/users/tests/test_models.py b/src/etools/applications/users/tests/test_models.py index 87ce368b0e..c673f88ab4 100644 --- a/src/etools/applications/users/tests/test_models.py +++ b/src/etools/applications/users/tests/test_models.py @@ -150,5 +150,7 @@ def test_user_profile(self): class TestGroups(BaseTenantTestCase): + fixtures = ('groups',) + def test_prc_secretary_available(self): self.assertTrue(Group.objects.filter(name=PRC_SECRETARY).exists()) diff --git a/src/etools/applications/vision/migrations/0001_initial.py b/src/etools/applications/vision/migrations/0001_initial.py index 109c21c5a9..9a94a74649 100644 --- a/src/etools/applications/vision/migrations/0001_initial.py +++ b/src/etools/applications/vision/migrations/0001_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 1.10.8 on 2018-03-26 16:05 +# Generated by Django 3.2.19 on 2024-07-19 11:57 -import django.db.models.deletion from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -18,14 +18,17 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('handler_name', models.CharField(max_length=50, verbose_name='Handler Name')), + ('business_area_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Business Area Code')), ('total_records', models.IntegerField(default=0, verbose_name='Total Records')), ('total_processed', models.IntegerField(default=0, verbose_name='Total Processed')), ('successful', models.BooleanField(default=False, verbose_name='Successful')), - ('details', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Details')), - ('exception_message', models.TextField(blank=True, null=True, verbose_name='Exception Message')), + ('details', models.CharField(blank=True, default='', max_length=2048, verbose_name='Details')), + ('exception_message', models.TextField(blank=True, default='', verbose_name='Exception Message')), ('date_processed', models.DateTimeField(auto_now=True, verbose_name='Date Processed')), - ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, - to='users.Country', verbose_name='Country')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.country', verbose_name='Country')), ], + options={ + 'abstract': False, + }, ), ] diff --git a/src/etools/applications/vision/migrations/0002_fix_null_values.py b/src/etools/applications/vision/migrations/0002_fix_null_values.py deleted file mode 100644 index 3c4fb58a93..0000000000 --- a/src/etools/applications/vision/migrations/0002_fix_null_values.py +++ /dev/null @@ -1,12 +0,0 @@ - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('vision', '0001_initial'), - ] - - operations = [ - ] diff --git a/src/etools/applications/vision/migrations/0003_make_not_nullable.py b/src/etools/applications/vision/migrations/0003_make_not_nullable.py deleted file mode 100644 index 6d0fcd6172..0000000000 --- a/src/etools/applications/vision/migrations/0003_make_not_nullable.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 1.9.10 on 2018-02-21 12:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('vision', '0002_fix_null_values'), - ] - - operations = [ - migrations.AlterField( - model_name='visionsynclog', - name='details', - field=models.CharField(blank=True, default='', max_length=2048, verbose_name='Details'), - ), - migrations.AlterField( - model_name='visionsynclog', - name='exception_message', - field=models.TextField(blank=True, default='', verbose_name='Exception Message'), - ), - ] diff --git a/src/etools/applications/vision/migrations/0004_visionsynclog_business_area_code.py b/src/etools/applications/vision/migrations/0004_visionsynclog_business_area_code.py deleted file mode 100644 index 486ad48a04..0000000000 --- a/src/etools/applications/vision/migrations/0004_visionsynclog_business_area_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.0.9 on 2019-02-06 15:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('vision', '0003_make_not_nullable'), - ] - - operations = [ - migrations.AddField( - model_name='visionsynclog', - name='business_area_code', - field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Business Area Code'), - ), - ]