[Mayan EDMS: 1656] Auto-increment ID metadata (implementation code inside)

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[Mayan EDMS: 1656] Auto-increment ID metadata (implementation code inside)

MacRobb Simpson
I just ran into this today, and thought someone else might be able to use it.

I have need of an 'auto-increment' metadata column - When adding a new document, if the field is blank, it should grab the next available number and use that.

I implemented this using a Parser:

1. Edit apps/metadata/models.py and edit class MetadataType. Replace:

        if self.parser:
            parser = import_string(self.parser)()
            value = parser.parse(value)

with:
        if self.parser:
            parser = import_string(self.parser)()
            parser.metadata_field = self #Rob - pass parent to parser
            value = parser.parse(value)

Now, the metadata instance is available within the parser class.

2. Edit apps/metadata/parsers.py and add metadata_field = None after the class header:
class MetadataParser(object):
    metadata_field = None

3. Add your parser code to the same file, after your other parsers:

class AutoIncrementID(MetadataParser):
    def execute(self, input_data):
        if input_data != '':
            return str(int(input_data))
       
        from .models import DocumentMetadata
        from django.db.models import Max
        return str(int(DocumentMetadata.objects.filter(metadata_type=self.metadata_field).aggregate(Max('value'))['value__max'])+1)

4. Register the new parser(bottom of the file, with the other similar lines):
MetadataParser.register(AutoIncrementID)

Now, you can create a metadata type, assign the new AutoIncrementID parser(I suggest creating an Integer Validator for checking this too).

When you add/edit a Docunment with this metadata type, if you manually enter a value it will accept it. If you leave the field blank, it will force the next available number on it.

Hope this helps someone!

-Rob

--

---
You received this message because you are subscribed to the Google Groups "Mayan EDMS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[Mayan EDMS: 1666] Re: Auto-increment ID metadata (implementation code inside)

rosarior
Administrator
Thanks for this! Will see how to add it as a core parser.

Take a look at the document renaming app (https://gitlab.com/mayan-edms/document_renaming) might have some things you can use too for your needs.

On Monday, April 24, 2017 at 11:54:47 AM UTC-4, MacRobb Simpson wrote:
I just ran into this today, and thought someone else might be able to use it.

I have need of an 'auto-increment' metadata column - When adding a new document, if the field is blank, it should grab the next available number and use that.

I implemented this using a Parser:

1. Edit apps/metadata/models.py and edit class MetadataType. Replace:

        if self.parser:
            parser = import_string(self.parser)()
            value = parser.parse(value)

with:
        if self.parser:
            parser = import_string(self.parser)()
            parser.metadata_field = self #Rob - pass parent to parser
            value = parser.parse(value)

Now, the metadata instance is available within the parser class.

2. Edit apps/metadata/parsers.py and add metadata_field = None after the class header:
class MetadataParser(object):
    metadata_field = None

3. Add your parser code to the same file, after your other parsers:

class AutoIncrementID(MetadataParser):
    def execute(self, input_data):
        if input_data != '':
            return str(int(input_data))
       
        from .models import DocumentMetadata
        from django.db.models import Max
        return str(int(DocumentMetadata.objects.filter(metadata_type=self.metadata_field).aggregate(Max('value'))['value__max'])+1)

4. Register the new parser(bottom of the file, with the other similar lines):
MetadataParser.register(AutoIncrementID)

Now, you can create a metadata type, assign the new AutoIncrementID parser(I suggest creating an Integer Validator for checking this too).

When you add/edit a Docunment with this metadata type, if you manually enter a value it will accept it. If you leave the field blank, it will force the next available number on it.

Hope this helps someone!

-Rob

--

---
You received this message because you are subscribed to the Google Groups "Mayan EDMS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/d/optout.
Loading...