reset migrations and manage working copy vs published revision
This commit is contained in:
parent
9d6c21e27a
commit
ac9f0aa0fc
|
@ -39,7 +39,6 @@ INSTALLED_APPS = [
|
|||
'django.contrib.staticfiles',
|
||||
'evolus',
|
||||
'jci',
|
||||
'crispy_forms',
|
||||
'simple_history',
|
||||
'process'
|
||||
]
|
||||
|
|
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
|
@ -1,7 +1,6 @@
|
|||
from django.contrib import admin
|
||||
from simple_history.admin import SimpleHistoryAdmin
|
||||
|
||||
from .models import Audience, Document, DocumentType, Version, Site, Structure
|
||||
from .models import Audience, Document, DocumentType, Version, Site, Structure, Revision
|
||||
|
||||
|
||||
class DocumentAdmin(admin.ModelAdmin):
|
||||
|
@ -18,3 +17,4 @@ admin.site.register(Structure)
|
|||
admin.site.register(Document, DocumentAdmin)
|
||||
admin.site.register(DocumentType, DocumentTypeAdmin)
|
||||
admin.site.register(Version)
|
||||
admin.site.register(Revision)
|
|
@ -1,7 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-15 07:12
|
||||
# Generated by Django 1.11.5 on 2017-09-20 18:56
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
@ -11,34 +12,168 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('jci', '0014_auto_20170920_1436'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='JCI',
|
||||
name='Audience',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('parent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.JCI')),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Audience')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AudienceClosure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('depth', models.IntegerField()),
|
||||
('child', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audienceclosure_parents', to='evolus.Audience')),
|
||||
('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audienceclosure_children', to='evolus.Audience')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'evolus_audienceclosure',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Document',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('overview', models.TextField(blank=True, null=True)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('revised_at', models.DateTimeField(blank=True, null=True)),
|
||||
('audiences', models.ManyToManyField(to='evolus.Audience')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DocumentType',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('level', models.IntegerField()),
|
||||
('template', models.FileField(blank=True, null=True, upload_to='documents_templates/')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['level'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='HistoricalDocument',
|
||||
fields=[
|
||||
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('overview', models.TextField(blank=True, null=True)),
|
||||
('created_at', models.DateTimeField(blank=True, editable=False)),
|
||||
('revised_at', models.DateTimeField(blank=True, null=True)),
|
||||
('history_id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('history_date', models.DateTimeField()),
|
||||
('history_change_reason', models.CharField(max_length=100, null=True)),
|
||||
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
|
||||
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
|
||||
('type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='evolus.DocumentType')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-history_date', '-history_id'),
|
||||
'get_latest_by': 'history_date',
|
||||
'verbose_name': 'historical document',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Revision',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('revision', models.FileField(upload_to='revisions/')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('minor', models.PositiveIntegerField()),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-minor',),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Site',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Structure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('acronym', models.CharField(blank=True, max_length=20, null=True)),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Structure')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='JCIClosure',
|
||||
name='StructureClosure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('depth', models.IntegerField()),
|
||||
('child', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='jciclosure_parents', to='evolus.JCI')),
|
||||
('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='jciclosure_children', to='evolus.JCI')),
|
||||
('child', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='structureclosure_parents', to='evolus.Structure')),
|
||||
('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='structureclosure_children', to='evolus.Structure')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'evolus_jciclosure',
|
||||
'db_table': 'evolus_structureclosure',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Version',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('major', models.PositiveIntegerField()),
|
||||
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='evolus.Document')),
|
||||
('published', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='published_version+', to='evolus.Revision')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='revision',
|
||||
name='version',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='revisions', to='evolus.Version'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='sites',
|
||||
field=models.ManyToManyField(to='evolus.Site'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='standards',
|
||||
field=models.ManyToManyField(related_name='documents', to='jci.Standard'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='structures',
|
||||
field=models.ManyToManyField(to='evolus.Structure'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='type',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='evolus.DocumentType'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='jciclosure',
|
||||
name='version',
|
||||
unique_together=set([('document', 'major')]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='structureclosure',
|
||||
unique_together=set([('parent', 'child')]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='audienceclosure',
|
||||
unique_together=set([('parent', 'child')]),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-15 07:25
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Audience',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('parent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Audience')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AudienceClosure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('depth', models.IntegerField()),
|
||||
('child', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audienceclosure_parents', to='evolus.Audience')),
|
||||
('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audienceclosure_children', to='evolus.Audience')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'evolus_audienceclosure',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Document',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('audience', models.ManyToManyField(to='evolus.Audience')),
|
||||
('jci', models.ManyToManyField(to='evolus.JCI')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Structure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('parent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Structure')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='StructureClosure',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('depth', models.IntegerField()),
|
||||
('child', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='structureclosure_parents', to='evolus.Structure')),
|
||||
('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='structureclosure_children', to='evolus.Structure')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'evolus_structureclosure',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='structure',
|
||||
field=models.ManyToManyField(to='evolus.Structure'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='structureclosure',
|
||||
unique_together=set([('parent', 'child')]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='audienceclosure',
|
||||
unique_together=set([('parent', 'child')]),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 19:00
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='version',
|
||||
name='published',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='published_version+', to='evolus.Revision'),
|
||||
),
|
||||
]
|
|
@ -1,37 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-15 07:49
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0002_auto_20170915_0925'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='jci',
|
||||
name='acronym',
|
||||
field=models.CharField(default='', max_length=50),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='audience',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Audience'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='jci',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.JCI'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='structure',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evolus.Structure'),
|
||||
),
|
||||
]
|
|
@ -1,47 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-15 07:54
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('jci', '0001_initial'),
|
||||
('evolus', '0003_auto_20170915_0949'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='jci',
|
||||
name='parent',
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='jciclosure',
|
||||
unique_together=set([]),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='jciclosure',
|
||||
name='child',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='jciclosure',
|
||||
name='parent',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='document',
|
||||
name='jci',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='standards',
|
||||
field=models.ManyToManyField(to='jci.Standard'),
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='JCI',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='JCIClosure',
|
||||
),
|
||||
]
|
|
@ -1,27 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 10:51
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0004_auto_20170915_0954'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Site',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='sites',
|
||||
field=models.ManyToManyField(to='evolus.Site'),
|
||||
),
|
||||
]
|
|
@ -1,25 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 10:54
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0005_auto_20170918_1251'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='site',
|
||||
options={'ordering': ['name']},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='title',
|
||||
field=models.CharField(default='', max_length=255),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 10:56
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0006_auto_20170918_1254'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='overview',
|
||||
field=models.TextField(blank=True, null=True),
|
||||
),
|
||||
]
|
|
@ -1,25 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 11:05
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0007_document_overview'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='document',
|
||||
old_name='audience',
|
||||
new_name='audiences',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='document',
|
||||
old_name='structure',
|
||||
new_name='structures',
|
||||
),
|
||||
]
|
|
@ -1,29 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 13:14
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0008_auto_20170918_1305'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DocumentType',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('template', models.FileField(blank=True, null=True, upload_to='documents_templates/')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='type',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='evolus.DocumentType'),
|
||||
),
|
||||
]
|
|
@ -1,21 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 13:18
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0009_auto_20170918_1514'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='documenttype',
|
||||
name='level',
|
||||
field=models.IntegerField(default=1),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -1,24 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-18 13:44
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0010_documenttype_level'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='documenttype',
|
||||
options={'ordering': ['level']},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='structure',
|
||||
name='acronym',
|
||||
field=models.CharField(blank=True, max_length=20, null=True),
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-19 14:19
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0011_auto_20170918_1544'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='document',
|
||||
name='standards',
|
||||
field=models.ManyToManyField(related_name='documents', to='jci.Standard'),
|
||||
),
|
||||
]
|
|
@ -1,55 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 12:36
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('evolus', '0012_auto_20170919_1619'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='HistoricalDocument',
|
||||
fields=[
|
||||
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('overview', models.TextField(blank=True, null=True)),
|
||||
('created_at', models.DateTimeField(blank=True, editable=False)),
|
||||
('revised_at', models.DateTimeField(blank=True, null=True)),
|
||||
('history_id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('history_date', models.DateTimeField()),
|
||||
('history_change_reason', models.CharField(max_length=100, null=True)),
|
||||
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
|
||||
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
|
||||
('type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='evolus.DocumentType')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'historical document',
|
||||
'ordering': ('-history_date', '-history_id'),
|
||||
'get_latest_by': 'history_date',
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='audience',
|
||||
options={'ordering': ('name',)},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='document',
|
||||
name='revised_at',
|
||||
field=models.DateTimeField(blank=True, null=True),
|
||||
),
|
||||
]
|
|
@ -1,31 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 13:02
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0013_auto_20170920_1436'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Version',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('major', models.IntegerField()),
|
||||
('minor', models.IntegerField()),
|
||||
('patch', models.IntegerField()),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='evolus.Document')),
|
||||
],
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='version',
|
||||
unique_together=set([('document', 'major', 'minor', 'patch')]),
|
||||
),
|
||||
]
|
|
@ -63,6 +63,22 @@ class Document(models.Model):
|
|||
revised_at = models.DateTimeField(null=True, blank=True)
|
||||
history = HistoricalRecords()
|
||||
|
||||
@property
|
||||
def last_published_version(self):
|
||||
try:
|
||||
return self.versions.filter(published__isnull=False).first().revisions.first()
|
||||
except Version.DoesNotExist:
|
||||
return 'None'
|
||||
except Exception:
|
||||
return 'None'
|
||||
|
||||
@property
|
||||
def last_working_version(self):
|
||||
try:
|
||||
return self.versions.filter(published__isnull=True).first().revisions.first()
|
||||
except Version.DoesNotExist:
|
||||
return 'None'
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
@ -74,14 +90,32 @@ class Document(models.Model):
|
|||
|
||||
|
||||
class Version(models.Model):
|
||||
document = models.ForeignKey(Document)
|
||||
major = models.IntegerField()
|
||||
minor = models.IntegerField()
|
||||
patch = models.IntegerField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
document = models.ForeignKey(Document, related_name='versions')
|
||||
major = models.PositiveIntegerField()
|
||||
published = models.OneToOneField('Revision', related_name='published_version+', null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document', 'major', 'minor', 'patch')
|
||||
unique_together = ('document', 'major')
|
||||
|
||||
@property
|
||||
def status(self):
|
||||
return 'Published' if self.published else 'Draft'
|
||||
|
||||
def __str__(self):
|
||||
return '{} v{}.{}.{}'.format(self.document, self.major, self.minor, self.patch)
|
||||
return '{} v{} ({})'.format(self.document, self.major, self.status)
|
||||
|
||||
def publish(self):
|
||||
pass
|
||||
|
||||
|
||||
class Revision(models.Model):
|
||||
revision = models.FileField(upload_to='revisions/')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
version = models.ForeignKey(Version, related_name='revisions')
|
||||
minor = models.PositiveIntegerField()
|
||||
|
||||
class Meta:
|
||||
ordering = ('-minor',)
|
||||
|
||||
def __str__(self):
|
||||
return '{} rev {}'.format(self.version, self.minor)
|
File diff suppressed because one or more lines are too long
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 13:06
|
||||
# Generated by Django 1.11.5 on 2017-09-20 18:56
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import process.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
@ -11,7 +12,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('evolus', '0014_auto_20170920_1502'),
|
||||
('evolus', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
@ -19,6 +20,7 @@ class Migration(migrations.Migration):
|
|||
name='Process',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('process_type', models.CharField(max_length=50)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
@ -26,6 +28,7 @@ class Migration(migrations.Migration):
|
|||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('assigned_to', models.EmailField(max_length=254)),
|
||||
('status', models.IntegerField(choices=[(1, 'Created'), (3, 'Completed')])),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
@ -33,28 +36,28 @@ class Migration(migrations.Migration):
|
|||
fields=[
|
||||
('process_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='process.Process')),
|
||||
],
|
||||
bases=('process.process',),
|
||||
bases=('process.process', process.models.DraftProcessMixin),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='GatherComments',
|
||||
fields=[
|
||||
('process_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='process.Process')),
|
||||
],
|
||||
bases=('process.process',),
|
||||
bases=('process.process', process.models.DraftProcessMixin),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Knowledge',
|
||||
fields=[
|
||||
('process_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='process.Process')),
|
||||
],
|
||||
bases=('process.process',),
|
||||
bases=('process.process', process.models.PublishedProcessMixin),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Review',
|
||||
fields=[
|
||||
('process_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='process.Process')),
|
||||
],
|
||||
bases=('process.process',),
|
||||
bases=('process.process', process.models.PublishedProcessMixin),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='task',
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 13:32
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('process', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='process',
|
||||
name='process_type',
|
||||
field=models.CharField(default='default process', max_length=50),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -1,21 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.5 on 2017-09-20 13:41
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('process', '0002_process_process_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='task',
|
||||
name='status',
|
||||
field=models.IntegerField(choices=[(1, 'Created'), (3, 'Completed')], default=1),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -24,6 +24,9 @@ class Process(models.Model):
|
|||
def allow_tasks_delegation(self):
|
||||
return True
|
||||
|
||||
def save(self):
|
||||
raise NotImplemented('is_valid has to be implemented on the subprocess')
|
||||
|
||||
|
||||
TASK_STATUS = (
|
||||
(1, 'Created'),
|
||||
|
@ -40,22 +43,36 @@ class Task(models.Model):
|
|||
return '{} - {}'.format(self.process, self.assigned_to)
|
||||
|
||||
|
||||
class Review(Process):
|
||||
class PublishedProcessMixin(object):
|
||||
def save(self, *args, **kwargs):
|
||||
if self.document_version.status == 'Draft':
|
||||
raise TypeError('Review flow cant apply to draft documents')
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class DraftProcessMixin(object):
|
||||
def save(self, *args, **kwargs):
|
||||
if self.document_version.status == 'Published':
|
||||
raise TypeError('Review flow cant apply to published documents')
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Review(Process, PublishedProcessMixin):
|
||||
PROCESS_TYPE = 'Review'
|
||||
|
||||
def __str__(self):
|
||||
return 'Review: {}'.format(self.document_version)
|
||||
|
||||
|
||||
class Approval(Process):
|
||||
class Approval(Process, DraftProcessMixin):
|
||||
PROCESS_TYPE = 'Approval'
|
||||
|
||||
|
||||
class GatherComments(Process):
|
||||
class GatherComments(Process, DraftProcessMixin):
|
||||
PROCESS_TYPE = 'GatherComments'
|
||||
|
||||
|
||||
class Knowledge(Process):
|
||||
class Knowledge(Process, PublishedProcessMixin):
|
||||
PROCESS_TYPE = 'Knowledge'
|
||||
|
||||
def allow_tasks_delegation(self):
|
||||
|
|
|
@ -2,3 +2,4 @@ django<1.12
|
|||
django-closuretree<1.2
|
||||
django-filter==1.0.4
|
||||
django-simple-history==1.9.0
|
||||
django-simple-history==1.9.0
|
||||
|
|
|
@ -0,0 +1,654 @@
|
|||
%PDF-1.3
|
||||
%ÿÿÿÿ
|
||||
1 0 obj
|
||||
<< /Creator <feff0050007200610077006e>
|
||||
/Producer <feff0050007200610077006e>
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 3 0 R
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<< /Type /Pages
|
||||
/Count 1
|
||||
/Kids [5 0 R]
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<< /Length 6358
|
||||
>>
|
||||
stream
|
||||
q
|
||||
|
||||
BT
|
||||
36 738.05 Td
|
||||
/F2.0 25 Tf
|
||||
[<4469676974616c4f6365616e>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
36 717.634 Td
|
||||
/F1.0 12 Tf
|
||||
[<3130312041> 40 <76> 25 <656e> 10 <7565206f662074686520416d6572> -15 <69636173> 15 <2c203130746820466c6f6f72>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
36 703.762 Td
|
||||
/F1.0 12 Tf
|
||||
[<4e65> 20 <772059> 140 <6f72> -15 <6b2c204e59203130303133>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
36 689.8899999999999 Td
|
||||
/F1.0 12 Tf
|
||||
[<56> 80 <41> 120 <542049443a204555353238303032323234>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
405.525 673.8639999999998 Td
|
||||
/F1.0 15 Tf
|
||||
[<44617465204973737565643a204d61> 30 <7920312c2032303137>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
410.385 656.5239999999998 Td
|
||||
/F1.0 15 Tf
|
||||
[<50> 50 <6572> -15 <696f643a20417072> -15 <696c2031202d2033302c2032303137>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
425.43600000000004 641.3379999999997 Td
|
||||
/F1.0 12 Tf
|
||||
[<496e> 20 <76> 25 <6f696365204e756d626572> -30 <3a20313031373932313637>] TJ
|
||||
ET
|
||||
|
||||
/DeviceRGB cs
|
||||
0.949 0.949 0.949 scn
|
||||
36.000 592.210 240.000 23.872 re
|
||||
f
|
||||
0.000 0.000 0.000 scn
|
||||
0.949 0.949 0.949 scn
|
||||
276.000 592.210 60.000 23.872 re
|
||||
f
|
||||
0.000 0.000 0.000 scn
|
||||
0.949 0.949 0.949 scn
|
||||
336.000 592.210 80.000 23.872 re
|
||||
f
|
||||
0.000 0.000 0.000 scn
|
||||
0.949 0.949 0.949 scn
|
||||
416.000 592.210 80.000 23.872 re
|
||||
f
|
||||
0.000 0.000 0.000 scn
|
||||
0.949 0.949 0.949 scn
|
||||
496.000 592.210 70.000 23.872 re
|
||||
f
|
||||
0.000 0.000 0.000 scn
|
||||
1 w
|
||||
/DeviceRGB CS
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 592.210 m
|
||||
276.000 592.210 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 616.082 m
|
||||
276.000 616.082 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
41 599.8379999999996 Td
|
||||
/F1.0 12 Tf
|
||||
[<4465736372> -15 <697074696f6e>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 592.210 m
|
||||
336.000 592.210 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 616.082 m
|
||||
336.000 616.082 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
281.0 599.8379999999996 Td
|
||||
/F1.0 12 Tf
|
||||
[<486f757273>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 592.210 m
|
||||
416.000 592.210 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 616.082 m
|
||||
416.000 616.082 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
341.0 599.8379999999996 Td
|
||||
/F1.0 12 Tf
|
||||
[<53746172> -40 <74>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 592.210 m
|
||||
496.000 592.210 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 616.082 m
|
||||
496.000 616.082 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
421.0 599.8379999999996 Td
|
||||
/F1.0 12 Tf
|
||||
[<456e64>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 592.210 m
|
||||
566.000 592.210 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 616.082 m
|
||||
566.000 616.082 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
501.0 599.8379999999996 Td
|
||||
/F1.0 12 Tf
|
||||
[<555344>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 570.650 m
|
||||
276.000 570.650 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
41 577.4019999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<4173686c65> 20 <794879706572> -40 <7465> 30 <787420283438474229>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 570.650 m
|
||||
336.000 570.650 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
281.0 577.4019999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<3737>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 570.650 m
|
||||
416.000 570.650 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
341.0 577.4019999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d32372030393a3439>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 570.650 m
|
||||
496.000 570.650 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
421.0 577.4019999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d33302031343a3536>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 570.650 m
|
||||
566.000 570.650 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
501.0 577.4019999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<2435352e3030>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 549.090 m
|
||||
276.000 549.090 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
41 555.8419999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<4173686c65> 20 <796465> 30 <762d706c6163653120283438474229>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 549.090 m
|
||||
336.000 549.090 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
281.0 555.8419999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<3737>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 549.090 m
|
||||
416.000 549.090 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
341.0 555.8419999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d32372031303a3331>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 549.090 m
|
||||
496.000 549.090 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
421.0 555.8419999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d33302031353a3130>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 549.090 m
|
||||
566.000 549.090 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
501.0 555.8419999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<2435352e3030>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 527.530 m
|
||||
276.000 527.530 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
41 534.2819999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<4173686c65> 20 <7949535020283332474229>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 527.530 m
|
||||
336.000 527.530 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
281.0 534.2819999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<3734>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 527.530 m
|
||||
416.000 527.530 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
341.0 534.2819999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d32372031333a3235>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 527.530 m
|
||||
496.000 527.530 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
421.0 534.2819999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d33302031353a3237>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 527.530 m
|
||||
566.000 527.530 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
501.0 534.2819999999997 Td
|
||||
/F1.0 10 Tf
|
||||
[<2433352e3234>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
36.000 505.970 m
|
||||
276.000 505.970 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
41 512.7219999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<56> 80 <41> 120 <542042656c6769756d>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
276.000 505.970 m
|
||||
336.000 505.970 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
336.000 505.970 m
|
||||
416.000 505.970 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
341.0 512.7219999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d30312030303a3030>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
416.000 505.970 m
|
||||
496.000 505.970 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
421.0 512.7219999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<30342d33302032333a3539>] TJ
|
||||
ET
|
||||
|
||||
1 w
|
||||
0.800 0.800 0.800 SCN
|
||||
496.000 505.970 m
|
||||
566.000 505.970 l
|
||||
S
|
||||
[ ] 0 d
|
||||
1 w
|
||||
0.000 0.000 0.000 SCN
|
||||
|
||||
BT
|
||||
501.0 512.7219999999998 Td
|
||||
/F1.0 10 Tf
|
||||
[<2433302e3530>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
477.99 480.19999999999976 Td
|
||||
/F2.0 15 Tf
|
||||
[<54> 80 <6f74616c3a20243137352e3734>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
36 439.50399999999973 Td
|
||||
/F2.0 12 Tf
|
||||
[<42696c6c2054> 80 <6f3a>] TJ
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
36 424.7319999999997 Td
|
||||
/F3.0 12 Tf
|
||||
<6670617563686574203c667061756368657440676d61696c2e636f6d3e> Tj
|
||||
ET
|
||||
|
||||
|
||||
BT
|
||||
98.05799999999999 385.83599999999973 Td
|
||||
/F1.0 12 Tf
|
||||
[<49662079> 20 <6f75206861> 20 <76> 25 <652061206372656469742063617264206f6e2066696c652069742077696c6c206265206175746f6d61746963616c6c7920636861726765642077697468696e20323420686f757273> 15 <2e>] TJ
|
||||
ET
|
||||
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
5 0 obj
|
||||
<< /Type /Page
|
||||
/Parent 3 0 R
|
||||
/MediaBox [0 0 612.0 792.0]
|
||||
/Contents 4 0 R
|
||||
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
||||
/Font << /F2.0 6 0 R
|
||||
/F1.0 7 0 R
|
||||
/F3.0 8 0 R
|
||||
>>
|
||||
>>
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<< /Type /Font
|
||||
/Subtype /Type1
|
||||
/BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<< /Type /Font
|
||||
/Subtype /Type1
|
||||
/BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<< /Type /Font
|
||||
/BaseFont /AAAAAA+DejaVuSans
|
||||
/Subtype /TrueType
|
||||
/FontDescriptor 10 0 R
|
||||
/FirstChar 32
|
||||
/LastChar 255
|
||||
/Widths 12 0 R
|
||||
/ToUnicode 11 0 R
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<< /Length1 21308
|
||||
/Length 8382
|
||||
/Filter [/FlateDecode]
|
||||
>>
|
||||
stream
|
||||
xœí{ |Seº÷{ÎsNšžnIh<49>ZZN[ÊÚNËJÒ6…Е6lz<6C>Û4IÛ@›„$™Ê€ã§¸ÃŒŠ3ŠÈu¹L][Gge.2WÇ原ÞÏ
ÇñNe˜¹èh-§÷yßsÒ¤¥ .÷÷ûÒœó.Ïò–÷9-á!I¤<49>ˆd‡«ÍHÉ.‘·áLÍ뚊F¾{¯O"½Óêw9Gweì!$ñ%\3±¥-|Íò?Iëñþ3¼¯liñ8»tn$X†÷ãڜׄ<>ñ+ñ¾ïåšú‚¢ÏsLIxÞ/
øCan¿ïßÁû…>g›'ãÃB’'2ï’s<ñr¤·ù“<19> '07îoxY<78>óbKS ¹mõ´5H¿v>êZ–‰7s6!‹ç¡Ì
|
||||
Žq„ê‡â¥Ž|é‹tǺ" H_òÒ‘8¢<38>—<12>_R2I1à<31>Ñôå|¿ÁOš”B“¸Š#—Y…/ˆîN/nàRpøÕžïë=¯öŽ0fó²<C3B3>ÙMéAFßÊÖ¸äÏþÔMB˜ÞD¬öiŸ"×ó\:-úpoAOáÌâ´Ü7_yEQpÝäûâ›Â.Ä¥Ê2™ßpÛ'Ð/žu"Ù¦KD<4B>çˆ<08>èŽãx2NÈ<4E>CRE³Q<C2B3>S=£fVÔ/<2F>>Ž3èµ<C3A8>ðñŠœx><3E>›Î‰o~ñ™ ïUDN*?VîÜϽ¼‹{™â[c™¢ÛFtÈY܆|É6ŽçtÛDÏs%:x"
|
||||
<EFBFBD>pÇéøq¡Œçõb¬qT?zä<b:GY¿!ò½Š ƒ“û•‚]JÁ~®<>a»IÙ·Z|<7C>$<24>Jr·¥ht"ÄïNOˀݕ)ÓŠSöîž™¶wÜUÅÓ².#MºÑ‰/›’5Ñnš2y¢Ý|y•áž¾ƒrZ™÷¼á„Ñ4›
|
||||
óêa:ôñ«Ï~{¢Èpø„qöìBRÑï¨èLt\UÑi ?FЩŽ«–"UýÏ"Uø¶Ì2ÎœµÂŸR=¶º z~µÀ]Í¥Ž,.š1}ÚøÜ—Ìå挟>mFqÑÈQÓ‹<C393>Wp8>aü8œB@ÒRM£F
|
||||
¸xæ(<28><>›3nÂx~ú4ÓÌ㊋„QY\š<> w\Ûqû–¬ÛÌgÏ»¯yïüñÑæms7ÿä¡ù–åµÎŽ÷î,ÔæåRï¿îó–+×+oü´[éÚ¸ñÆ›~xWwèUnUGE<47>òkåÏ|úæŸï¼ã¶‡v*«ìŸ9Ò[QyýiyäÛ<C3A4>:X{ýVK“òËçPþkeKÛ²Å~góõë×söCû¹Eë7lÚ·£ñOÊçÊK:ŠGÿûÂT¡ƒH$<24>´LH›0*>™ì¥ëN6Ê7Ž=0¦;·ËxÛ¨D2
|
||||
F'ÅëÆ‚>Õ6ÝíÅW{ŠŠŒî‚ÃÇOõ<4F>ê1<
0Û8Û4»Ðâ+Ì,Ì*[(fæÌŸ`É´dYÆZdK¶%§6³6«vl\›]›S;!0á†ÌMY›Æn’7eß<65>³eÂŽ ''dE¶F6E64d5Œm<C592>²Y<>±9<>½1kãØ<C3A3>òÆìÑW£™rtiÌR—s3<73>¹Ó•Z.nú<1A>æí½×ùÖÝÕ5ÿàM{<7B>žþ‚㾧a¿ÃóÌ•ÿ}’/nêh½ñä¤ÊÓ×íir>÷à¡gMnÍÏß3aB<1F>‘ÕýïLjU:™oÉ 7r7 É7&Ý$u…îQÒeq˜©¦Ú.3ô/¢Yá8‚¢œ:aøäD¡%!%Ã<>±1cKÆŽ…MËGù4<C3B9>g¦Qa‰Ñ@²‹F‡Õ÷×>ñüóOÔÞ_]õÐÕ§•×¹©œnɃÂô½S¦¼ìØûS¦ì7Ž»=ÑÄÍÉe1„r P®T’A–q$<24>‹¿Q“˜¶›»¹§Gw›ºo“‘ÆëÓô¤‚7¥ØÆ OõÆpQÅ<n@ÛNÑø)´LšŸÈÜ‘ùRæÉLq>™ÏÍçç§ÍÏÍqú‚x³ä'~ÎÏûÓüñW¯¦ªdgq-dªEq‰cêÅ úO<öÔÊ]/RN)/p“úÞãâºø‡nº·;™ÿþ•Ï¼0mÚ¾Éfn'q#¸Rå?ßóä¾íëTì3]*AVXƈ.Q¿[Çm"÷$ëJüˆ8/ê“R*S
}<15>’cy7fˬ<15>ÉìºÿÙY+æî›wø0ËÇ‹0#œ(›Bn¿%6mG è(d&—<>–mÌE—)¦îÂÖéªâ
|
||||
”—»;;÷Ò¥þ¬¶Åµ¹¯ |