diff --git a/mayan/apps/document_signatures/tests.py b/mayan/apps/document_signatures/tests.py index 78d154a686..de112baef8 100644 --- a/mayan/apps/document_signatures/tests.py +++ b/mayan/apps/document_signatures/tests.py @@ -6,7 +6,7 @@ from django.conf import settings from django.core.files.base import File from django.test import TestCase -from documents.literals import VERSION_UPDATE_MAJOR, RELEASE_LEVEL_FINAL +from documents.literals import VERSION_UPDATE_MAJOR from documents.models import Document, DocumentType from django_gpg.literals import SIGNATURE_STATE_VALID from django_gpg.runtime import gpg @@ -44,8 +44,6 @@ class DocumentTestCase(TestCase): new_version_data = { 'comment': 'test comment 1', 'version_update': VERSION_UPDATE_MAJOR, - 'release_level': RELEASE_LEVEL_FINAL, - 'serial': 0, } self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data) @@ -57,8 +55,6 @@ class DocumentTestCase(TestCase): new_version_data = { 'comment': 'test comment 2', 'version_update': VERSION_UPDATE_MAJOR, - 'release_level': RELEASE_LEVEL_FINAL, - 'serial': 0, } with open(TEST_DOCUMENT_PATH) as file_object: self.document.new_version(file=File(file_object), **new_version_data) diff --git a/mayan/apps/documents/__init__.py b/mayan/apps/documents/__init__.py index e3961eb4cc..1d587aedff 100644 --- a/mayan/apps/documents/__init__.py +++ b/mayan/apps/documents/__init__.py @@ -143,16 +143,16 @@ class_permissions(Document, [PERMISSION_DOCUMENT_DELETE, PERMISSION_HISTORY_VIEW]) document_search = SearchModel('documents', 'Document', permission=PERMISSION_DOCUMENT_VIEW, serializer=DocumentSerializer) -document_search.add_model_field('document_type__name', label=_(u'Document type')) # TODO: move these to their respective apps +# Moving these to other apps cause an ImportError; circular import? +document_search.add_model_field('document_type__name', label=_(u'Document type')) document_search.add_model_field('versions__mimetype', label=_(u'MIME type')) document_search.add_model_field('versions__filename', label=_(u'Filename')) document_search.add_model_field('metadata__metadata_type__name', label=_(u'Metadata type')) document_search.add_model_field('metadata__value', label=_(u'Metadata value')) document_search.add_model_field('versions__pages__content', label=_(u'Content')) document_search.add_model_field('description', label=_(u'Description')) -document_search.add_related_field('comments', 'Comment', 'comment', 'object_pk', label=_(u'Comments')) namespace = StatisticNamespace(name='documents', label=_(u'Documents')) namespace.add_statistic(DocumentStatistics(name='document_stats', label=_(u'Document tendencies'))) diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index 40f2d6a284..ef9923374c 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -93,14 +93,12 @@ class APIDocumentVersionCreateView(generics.CreateAPIView): major=serializer.object.major, minor=serializer.object.minor, micro=serializer.object.micro, - release_level=serializer.object.release_level, - serial=serializer.object.serial ) except DocumentVersion.DoesNotExist: self.object = serializer.save(force_insert=True) else: return Response( - {'non_field_errors': 'A version with the same major, minor, micro, release_level and serial values already exist for this document.'}, + {'non_field_errors': 'A version with the same major, minor and micro values already exist for this document.'}, status=status.HTTP_400_BAD_REQUEST ) diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 36396c58db..542430f4d0 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -13,8 +13,7 @@ from common.widgets import TextAreaDiv from .models import (Document, DocumentType, DocumentPage, DocumentPageTransformation, DocumentTypeFilename, DocumentVersion) -from .literals import (DEFAULT_ZIP_FILENAME, RELEASE_LEVEL_CHOICES, - RELEASE_LEVEL_FINAL) +from .literals import DEFAULT_ZIP_FILENAME from .widgets import DocumentPagesCarouselWidget, DocumentPageImageWidget @@ -143,20 +142,6 @@ class DocumentForm(forms.ModelForm): choices=DocumentVersion.get_version_update_choices(document.latest_version) ) - self.fields['release_level'] = forms.ChoiceField( - label=_(u'Release level'), - choices=RELEASE_LEVEL_CHOICES, - initial=RELEASE_LEVEL_FINAL, - ) - - self.fields['serial'] = forms.IntegerField( - label=_(u'Release level serial'), - initial=0, - widget=forms.widgets.TextInput( - attrs={'style': 'width: auto;'} - ), - ) - self.fields['comment'] = forms.CharField( label=_(u'Comment'), required=False, @@ -172,8 +157,6 @@ class DocumentForm(forms.ModelForm): cleaned_data['new_version_data'] = { 'comment': self.cleaned_data.get('comment'), 'version_update': self.cleaned_data.get('version_update'), - 'release_level': self.cleaned_data.get('release_level'), - 'serial': self.cleaned_data.get('serial'), } # Always return the full collection of cleaned data. @@ -191,8 +174,6 @@ class DocumentForm_edit(DocumentForm): def __init__(self, *args, **kwargs): super(DocumentForm_edit, self).__init__(*args, **kwargs) if kwargs['instance'].latest_version: - self.fields.pop('serial') - self.fields.pop('release_level') self.fields.pop('version_update') self.fields.pop('comment') else: diff --git a/mayan/apps/documents/literals.py b/mayan/apps/documents/literals.py index e1bbaf9404..623a80e17d 100644 --- a/mayan/apps/documents/literals.py +++ b/mayan/apps/documents/literals.py @@ -5,20 +5,6 @@ PICTURE_ERROR_MEDIUM = u'1297211435_error.png' PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png' PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.png' -RELEASE_LEVEL_FINAL = 1 -RELEASE_LEVEL_ALPHA = 2 -RELEASE_LEVEL_BETA = 3 -RELEASE_LEVEL_RC = 4 -RELEASE_LEVEL_HF = 5 - -RELEASE_LEVEL_CHOICES = ( - (RELEASE_LEVEL_FINAL, _(u'Final')), - (RELEASE_LEVEL_ALPHA, _(u'Alpha')), - (RELEASE_LEVEL_BETA, _(u'Beta')), - (RELEASE_LEVEL_RC, _(u'Release candidate')), - (RELEASE_LEVEL_HF, _(u'Hotfix')), -) - VERSION_UPDATE_MAJOR = u'major' VERSION_UPDATE_MINOR = u'minor' VERSION_UPDATE_MICRO = u'micro' diff --git a/mayan/apps/documents/migrations/0021_auto__del_field_documentversion_serial__del_field_documentversion_rele.py b/mayan/apps/documents/migrations/0021_auto__del_field_documentversion_serial__del_field_documentversion_rele.py new file mode 100644 index 0000000000..a4e7d6b943 --- /dev/null +++ b/mayan/apps/documents/migrations/0021_auto__del_field_documentversion_serial__del_field_documentversion_rele.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Removing unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro', 'release_level', 'serial'] + db.delete_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro', 'release_level', 'serial']) + + # Deleting field 'DocumentVersion.serial' + db.delete_column(u'documents_documentversion', 'serial') + + # Deleting field 'DocumentVersion.release_level' + db.delete_column(u'documents_documentversion', 'release_level') + + # Adding unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro'] + db.create_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro']) + + + def backwards(self, orm): + # Removing unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro'] + db.delete_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro']) + + # Adding field 'DocumentVersion.serial' + db.add_column(u'documents_documentversion', 'serial', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0), + keep_default=False) + + # Adding field 'DocumentVersion.release_level' + db.add_column(u'documents_documentversion', 'release_level', + self.gf('django.db.models.fields.PositiveIntegerField')(default=1), + keep_default=False) + + # Adding unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro', 'release_level', 'serial'] + db.create_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro', 'release_level', 'serial']) + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'documents'", 'null': 'True', 'to': u"orm['documents.DocumentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '48', 'blank': 'True'}) + }, + u'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': u"orm['documents.DocumentVersion']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + u'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.DocumentPage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + u'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}) + }, + u'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'versions'", 'to': u"orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}) + }, + u'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.Document']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + } + } + + complete_apps = ['documents'] \ No newline at end of file diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index 77d7ee7f9e..362ae2f7aa 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -30,8 +30,7 @@ from mimetype.api import get_mimetype from .events import HISTORY_DOCUMENT_CREATED from .exceptions import NewDocumentVersionNotAllowed -from .literals import (RELEASE_LEVEL_CHOICES, RELEASE_LEVEL_FINAL, - VERSION_UPDATE_MAJOR, VERSION_UPDATE_MICRO, +from .literals import (VERSION_UPDATE_MAJOR, VERSION_UPDATE_MICRO, VERSION_UPDATE_MINOR) from .managers import (DocumentPageTransformationManager, DocumentTypeManager, RecentDocumentManager) @@ -187,7 +186,7 @@ class Document(models.Model): def size(self): return self.latest_version.size - def new_version(self, file, user=None, comment=None, version_update=None, release_level=None, serial=None): + def new_version(self, file, user=None, comment=None, version_update=None): logger.debug('creating new document version') # TODO: move this restriction to a signal processor of the checkouts app if not self.is_new_versions_allowed(user=user): @@ -202,8 +201,6 @@ class Document(models.Model): major=new_version_dict.get('major'), minor=new_version_dict.get('minor'), micro=new_version_dict.get('micro'), - release_level=release_level, - serial=serial, comment=comment, ) new_version.save() @@ -316,8 +313,8 @@ class DocumentVersion(models.Model): @staticmethod def get_version_update_choices(document_version): return ( - (VERSION_UPDATE_MAJOR, _(u'Major %(major)i.%(minor)i, (new release)') % document_version.get_new_version_dict(VERSION_UPDATE_MAJOR)), - (VERSION_UPDATE_MINOR, _(u'Minor %(major)i.%(minor)i, (some updates)') % document_version.get_new_version_dict(VERSION_UPDATE_MINOR)), + (VERSION_UPDATE_MAJOR, _(u'Major %(major)i.%(minor)i.%(micro)i, (new release)') % document_version.get_new_version_dict(VERSION_UPDATE_MAJOR)), + (VERSION_UPDATE_MINOR, _(u'Minor %(major)i.%(minor)i.%(micro)i, (some updates)') % document_version.get_new_version_dict(VERSION_UPDATE_MINOR)), (VERSION_UPDATE_MICRO, _(u'Micro %(major)i.%(minor)i.%(micro)i, (fixes)') % document_version.get_new_version_dict(VERSION_UPDATE_MICRO)) ) @@ -333,8 +330,6 @@ class DocumentVersion(models.Model): major = models.PositiveIntegerField(verbose_name=_(u'Mayor'), default=1) minor = models.PositiveIntegerField(verbose_name=_(u'Minor'), default=0) micro = models.PositiveIntegerField(verbose_name=_(u'Micro'), default=0) - release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'Release level')) - serial = models.PositiveIntegerField(verbose_name=_(u'Serial'), default=0) timestamp = models.DateTimeField(verbose_name=_(u'Timestamp'), auto_now_add=True) comment = models.TextField(blank=True, verbose_name=_(u'Comment')) @@ -346,7 +341,7 @@ class DocumentVersion(models.Model): checksum = models.TextField(blank=True, null=True, verbose_name=_(u'Checksum'), editable=False) class Meta: - unique_together = ('document', 'major', 'minor', 'micro', 'release_level', 'serial') + unique_together = ('document', 'major', 'minor', 'micro') verbose_name = _(u'Document version') verbose_name_plural = _(u'Document version') @@ -379,13 +374,7 @@ class DocumentVersion(models.Model): """ Return the formatted version information """ - vers = [u'%i.%i' % (self.major, self.minor), ] - - if self.micro: - vers.append(u'.%i' % self.micro) - if self.release_level != RELEASE_LEVEL_FINAL: - vers.append(u'%s%i' % (self.get_release_level_display(), self.serial)) - return u''.join(vers) + return u'%i.%i.%i' % (self.major, self.minor, self.micro) def save(self, *args, **kwargs): """ diff --git a/mayan/apps/documents/tests.py b/mayan/apps/documents/tests.py index eb0cd803e6..23041d7240 100644 --- a/mayan/apps/documents/tests.py +++ b/mayan/apps/documents/tests.py @@ -13,7 +13,7 @@ from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient -from .literals import VERSION_UPDATE_MAJOR, RELEASE_LEVEL_FINAL +from .literals import VERSION_UPDATE_MAJOR from .models import Document, DocumentType TEST_ADMIN_PASSWORD = 'test_admin_password' @@ -59,8 +59,6 @@ class DocumentTestCase(TestCase): new_version_data = { 'comment': 'test comment 1', 'version_update': VERSION_UPDATE_MAJOR, - 'release_level': RELEASE_LEVEL_FINAL, - 'serial': 0, } new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data) @@ -70,8 +68,6 @@ class DocumentTestCase(TestCase): new_version_data = { 'comment': 'test comment 2', 'version_update': VERSION_UPDATE_MAJOR, - 'release_level': RELEASE_LEVEL_FINAL, - 'serial': 0, } with open(TEST_DOCUMENT_PATH) as file_object: new_version = self.document.new_version(file=File(file_object), **new_version_data)