Files
lib-paveit-demo/src/paveit/datamodels/material.py

146 lines
3.7 KiB
Python
Executable File

import datetime
from re import T
from bson.json_util import loads
from mongoengine import *
from .enumeration import BitumenCategoryEnum
from .norm_specification import DeliveryGrain, EnumerateBase
from .norm_documents import NormDocumentAggregate, NormDocumentBitumen, NormDocumentAsphalt
from .project import Project
from .usermanagement import Organisation, User
class Material(Document):
date = DateTimeField(default=datetime.datetime.now,
wtf_options={"render_kw": {
"step": "60"
}})
org_id = LazyReferenceField(Organisation,
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,
reverse_delete_rule=DO_NOTHING)
tags = ListField(StringField())
def to_dict(self):
# convert data to dict
data = self.to_mongo().to_dict()
# Laden und hinzufügen der referenzierten Daten
try:
data['parameter'] = self.parameter.to_mongo().to_dict()
except:
pass
try:
norm = self.norm.fetch() # Trigger the dereferencing
data['norm'] = norm.to_mongo().to_dict()
except:
raise
return data
meta = {
'allow_inheritance': True,
'index_opts': {},
'index_background': True,
'index_cls': False,
'auto_create_index': True,
'collection': 'materials',
"db_alias": 'dblabtests',
'indexes': [
[("material", 1)],
[("name", 1)],
]
}
class Asphalt(Material):
norm = LazyReferenceField(NormDocumentAsphalt, required=True)
name = StringField()
material = StringField()
bitumen = StringField(required=False)
young_modulus = DictField()
fatigue = DictField()
# Bitumen
class Bitumen(Material):
name = StringField()
producer = StringField()
batch_number = StringField()
category = EnumField(BitumenCategoryEnum, required=True)
norm = LazyReferenceField(NormDocumentBitumen, required=True)
parameter = ReferenceField(Material)
limits = LazyReferenceField(EnumerateBase)
class Bitumenemulsion(Material):
norm = StringField(required=False, default='TP Asphalt Teil 24')
name = StringField()
material = StringField()
young_modulus = DictField()
class Epoxy(Material):
norm = StringField(required=False, default='TP Asphalt Teil 24')
name = StringField()
material = StringField()
young_modulus = DictField()
class Kompaktasphalt(Material):
norm = StringField(required=False, default='TP Asphalt Teil 24')
name = StringField()
class Aggregate(Material):
norm = LazyReferenceField(NormDocumentAggregate, required=True)
name = StringField(required=True)
producer = StringField(required=True)
supply_source = StringField(required=True) #Bezugsquelle
batch_number = StringField()
ce_marking = StringField(required=True) #CE Kennzeichen
delivery_grain = LazyReferenceField(DeliveryGrain,
required=True,
reverse_delete_rule=CASCADE) #Lieferkörnung
class Dummy(Material):
name = StringField()
material = StringField()
young_modulus = DictField()