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()