diff --git a/src/paveit/datamodels/__init__.py b/src/paveit/datamodels/__init__.py index 8708168..302638a 100755 --- a/src/paveit/datamodels/__init__.py +++ b/src/paveit/datamodels/__init__.py @@ -6,6 +6,7 @@ from .enumeration import * from .labworks import * from .machines import * from .material import * +from .material_properties import * from .messages import * from .metrics import * from .norm_documents import * diff --git a/src/paveit/datamodels/enumeration.py b/src/paveit/datamodels/enumeration.py index 31685da..bf5cd7a 100755 --- a/src/paveit/datamodels/enumeration.py +++ b/src/paveit/datamodels/enumeration.py @@ -5,9 +5,14 @@ from mongoengine import * from paveit.helper import fetch_recursive, mongo_to_dict -from .usermanagement import Organisation - - +class ModelSelection(Enum): + """ + Welche Module sind in der App verfügbar + """ + + BASE = 'base' + ADVANCED = 'advanced' + class ProcessStatusEnum(Enum): """Status eines Prozesses wie Projekt, Task @@ -46,6 +51,10 @@ class AsphaltCategoryEnum(Enum): PA = "Offenporiger Asphalt" ACTD = 'Asphalttragdeckschichtmischgut' +class TaskType(Enum): + + SINGLE = "single" + FLOW = "flow" class LabtestsEnum(Enum): # Performance @@ -61,16 +70,11 @@ class Config(Document): tags = ListField(StringField()) - def to_dict(self, enabled=True): + def to_dict(self): # convert data to dict data = fetch_recursive(self) data = mongo_to_dict(data) - if enabled: - if data['enabled']: - return data - else: - return [] return data meta = { @@ -95,13 +99,10 @@ class Labtest(Config): eine Steuerung der verfügbaren Module. Die Versuche werden nachfolgend in Klasse/Kategorien eingeteil, um eine Trennung in Module zu ermöglichen.""" - org_id = LazyReferenceField(Organisation, - required=True, - reverse_delete_rule=CASCADE) + test = EnumField(LabtestsEnum, required=True) + modul = ListField(EnumField(ModelSelection, required=True, default=ModelSelection.BASE)) + typ = EnumField(TaskType, required=True, default=TaskType.SINGLE) - test = EnumField(LabtestsEnum, required=True) - - enabled = BooleanField(required=True, default=False) class LabtestPerformAsphalt(Labtest): """ Performanceprüfung Asphalt """ diff --git a/src/paveit/datamodels/material.py b/src/paveit/datamodels/material.py index 2ed94e8..900de35 100755 --- a/src/paveit/datamodels/material.py +++ b/src/paveit/datamodels/material.py @@ -19,10 +19,6 @@ from .usermanagement import Organisation, User class Material(Document): - name = StringField(required=True) - producer = StringField(required=True) - - date = DateTimeField(default=datetime.datetime.now, wtf_options={"render_kw": { "step": "60" @@ -32,17 +28,15 @@ class Material(Document): required=True, reverse_delete_rule=CASCADE) - project_id = ListField(LazyReferenceField(Project, - required=False, - reverse_delete_rule=CASCADE), - required=False) user_id = LazyReferenceField(User, - required=False, + required=True, reverse_delete_rule=DO_NOTHING) - tags = ListField(StringField()) - + project_ids = ListField(LazyReferenceField(Project, + reverse_delete_rule=CASCADE), + required=False) + def to_dict(self): # convert data to dict data = fetch_recursive(self) @@ -67,16 +61,17 @@ class Material(Document): class Asphalt(Material): - norm = LazyReferenceField(NormDocumentAsphalt, required=True) - limits = LazyReferenceField(EnumerateBase) - ce_marking = StringField(required=False) #CE Kennzeichen + pass + #limits = LazyReferenceField(EnumerateBase) # Bitumen class Bitumen(Material): - norm = LazyReferenceField(NormDocumentBitumen, required=True) - limits = LazyReferenceField(EnumerateBase) - ce_marking = StringField(required=False) #CE Kennzeichen + pass + + #norm = LazyReferenceField(NormDocumentBitumen, required=True) + #limits = LazyReferenceField(EnumerateBase) + #ce_marking = StringField(required=False) #CE Kennzeichen class Bitumenemulsion(Material): @@ -102,13 +97,12 @@ class Kompaktasphalt(Material): class Aggregate(Material): - norm = LazyReferenceField(NormDocumentAggregate, required=True) - limits = LazyReferenceField(DeliveryGrain, required=True, - reverse_delete_rule=CASCADE) #Lieferkörnung + pass + - ce_marking = StringField(required=False) #CE Kennzeichen - +class Additive(Material): + typ = StringField(required=True) diff --git a/src/paveit/datamodels/material_properties.py b/src/paveit/datamodels/material_properties.py new file mode 100755 index 0000000..8ec183f --- /dev/null +++ b/src/paveit/datamodels/material_properties.py @@ -0,0 +1,172 @@ +import datetime + +from mongoengine import * + +from paveit.helper import fetch_recursive, mongo_to_dict + +from enum import Enum + +from .material import Material, Additive +from .usermanagement import Organisation, User + +from .enumeration import AsphaltCategoryEnum, BitumenCategoryEnum +from .norm_documents import ( + NormDocumentAggregate, + NormDocumentAsphalt, + NormDocumentBitumen, +) +from .norm_specification import ( + AsphaltParameterLimitsBaseEnum, + BitumenParameterLimitsBaseEnum +) + + +class ProcessParameters(Enum): + """ + Typ der Wert: + NOMINAL: Istwer + SET: Sollwert + """ + + NOMINAL = 'nominal' + SET = 'set' + + +class Address(EmbeddedDocument): + company = StringField() + + street = StringField() + number = IntField() + city = StringField() + postal_code = IntField() + country = StringField() + +class Additive(EmbeddedDocument): + + additive_id = LazyReferenceField(Additive, required=True) + + quantity = IntField() + + + + + +class Propertie(Document): + + material_id = LazyReferenceField(Material, + required=True, + reverse_delete_rule=CASCADE) + + + date = DateTimeField(default=datetime.datetime.now, + wtf_options={"render_kw": { + "step": "60" + }}) + + def to_dict(self): + # convert data to dict + data = fetch_recursive(self) + data = mongo_to_dict(data) + + return data + + meta = { + 'allow_inheritance': True, + 'index_opts': {}, + 'index_background': True, + 'index_cls': False, + 'auto_create_index': True, + 'collection': 'materialproperties', + "db_alias": 'dblabtests', + 'indexes': [ + [("material", 1)], + [("name", 1)], + ] + } + +# Additives + +class PropertieAdditives(Propertie): + pass + +class PropertieAdditivesMeta(PropertieAdditives): + + name = StringField() + productnumber = StringField() + + certificate_number = StringField() + certificate_date = IntField() + + address = EmbeddedDocumentField(Address) + + #category = LazyReferenceField(BitumenParameterLimitsBaseEnum, required=False) + + +# Aggregates + +class PropertieAggregate(Propertie): + pass + +class PropertieAggregateMeta(PropertieAggregate): + + name = StringField() + productnumber = StringField() + + certificate_number = StringField() + certificate_date = IntField() + + mine = StringField() + address = EmbeddedDocumentField(Address) + + category = LazyReferenceField(BitumenParameterLimitsBaseEnum, required=False) + + +# Bitumen +class PropertieBitumen(Propertie): + pass + +class PropertieBitumenMeta(PropertieBitumen): + + name = StringField() + productnumber = StringField() + + certificate_number = StringField() + certificate_date = IntField() + + address = EmbeddedDocumentField(Address) + + category = LazyReferenceField(BitumenParameterLimitsBaseEnum, required=True) + + +# Asphate +class PropertieAsphalt(Propertie): + pass + +class PropertieAsphaltMeta(PropertieAsphalt): + + name = StringField() + productnumber = StringField() + + recipenumber = StringField() + certificate_number = StringField() + certificate_date = IntField() + + mixing_plant = StringField() + address = EmbeddedDocumentField(Address) + + category = LazyReferenceField(AsphaltParameterLimitsBaseEnum, required=True) + +class PropertieAsphaltBitumenContent(PropertieAsphalt): + + process_parameter = EnumField(ProcessParameters, required=True) # Ist- oder Sollwert + + quantity_bitumen = IntField() + quantity_additive_bitumen = IntField() + quantity_bitumen_total = IntField() + total_bituem_content = IntField() + elastic_recovery = IntField() + equistiffness_temperature = IntField() + phase_angle = IntField() + + additives = ListField(EmbeddedDocumentField(Additive)) + diff --git a/src/paveit/datamodels/norm_specification.py b/src/paveit/datamodels/norm_specification.py index 07fb805..7db6c7c 100644 --- a/src/paveit/datamodels/norm_specification.py +++ b/src/paveit/datamodels/norm_specification.py @@ -25,6 +25,9 @@ class EnumerateBase(Document): } +# Addidive +class AdditiveEnum(EnumerateBase): + name = StringField() # Gesteine class DeliveryGrain(EnumerateBase): diff --git a/src/paveit/datamodels/usermanagement.py b/src/paveit/datamodels/usermanagement.py index 124cdfd..69f357a 100755 --- a/src/paveit/datamodels/usermanagement.py +++ b/src/paveit/datamodels/usermanagement.py @@ -1,7 +1,7 @@ import datetime from mongoengine import * - +from .enumeration import ModelSelection class Organisation(Document): @@ -18,6 +18,8 @@ class Organisation(Document): domain = StringField(required=True) + modul = EnumField(ModelSelection, required=True, default=ModelSelection.BASE) + meta = { 'allow_inheritance': True,