diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/src/paveit/datamodels/client.py b/src/paveit/datamodels/client.py old mode 100644 new mode 100755 index 9928af2..a4702ee --- a/src/paveit/datamodels/client.py +++ b/src/paveit/datamodels/client.py @@ -1,15 +1,48 @@ -import datetime - from mongoengine import * +import datetime + from .usermanagement import Organisation, User - class Client(Document): + + date = DateTimeField(default=datetime.datetime.now, + wtf_options={"render_kw": { + "step": "60" + }}) org_id = LazyReferenceField(Organisation, required=True) user_id = LazyReferenceField(User, required=True, reverse_delete_rule=DO_NOTHING) - clientid = StringField(max_length=100) \ No newline at end of file + name = StringField(max_length=100) + name_short = StringField(max_length=100) + + customer_id = StringField(max_length=100) + + address_country = StringField(max_length=100, default='Germany') + address_road = StringField(max_length=100) + address_plz = StringField(max_length=5) + address_city = StringField(max_length=100) + + vat_id = StringField(max_length=100) #Umsatzsteuer + + billing_country = StringField(max_length=100, default='Germany') + billing_road = StringField(max_length=100) + billing_plz = StringField(max_length=5) + billing_city = StringField(max_length=100) + billing_addition = StringField(max_length=100) + + + + + meta = { + 'allow_inheritance': True, + 'index_opts': {}, + 'index_background': True, + 'index_cls': False, + 'auto_create_index': True, + 'collection': 'clients', + "db_alias": 'dblabtests', + } \ No newline at end of file diff --git a/src/paveit/datamodels/enumeration.py b/src/paveit/datamodels/enumeration.py old mode 100644 new mode 100755 index 73ac892..4928813 --- a/src/paveit/datamodels/enumeration.py +++ b/src/paveit/datamodels/enumeration.py @@ -3,4 +3,24 @@ from enum import Enum class LabtestsEnum(Enum): CITTStiffness = 'CITTStiffness' - SHEARStiffness = 'SheartestStiffness' \ No newline at end of file + SHEARStiffness = 'SheartestStiffness' + + +class ProcessStatusEnum(Enum): + """Status eines Prozesses wie Projekt, Task + + Ongoing: Ein fortlaufender Prozess, der noch nicht abgeschlossen ist. + In progress: Der Prozess ist aktiv und befindet sich in Arbeit. + Stalled: Der Prozess ist ins Stocken geraten oder vorübergehend gestoppt. + Completed: Der Prozess ist abgeschlossen oder beendet. + Pending: Der Prozess steht noch aus oder wurde noch nicht gestartet. + Suspended: Der Prozess wurde vorübergehend oder dauerhaft ausgesetzt. + Initiated: Der Prozess wurde gestartet oder eingeleitet. + Advanced: Der Prozess hat einen hohen Grad an Fortschritt oder Entwicklung erreicht. + Delayed: Der Prozess wurde verzögert und läuft hinter dem Zeitplan zurück. + Finalized: Der Prozess wurde abgeschlossen, und alle Details sind geklärt. + """ + INITIATED='initiated' + ONGOING = 'ongoing' + COMPLETED = 'completed' + ARCHIVE='archive' \ No newline at end of file diff --git a/src/paveit/datamodels/infrastructure.py b/src/paveit/datamodels/infrastructure.py old mode 100644 new mode 100755 diff --git a/src/paveit/datamodels/metrics.py b/src/paveit/datamodels/metrics.py old mode 100644 new mode 100755 diff --git a/src/paveit/datamodels/project.py b/src/paveit/datamodels/project.py index 5fdd03e..12bf256 100755 --- a/src/paveit/datamodels/project.py +++ b/src/paveit/datamodels/project.py @@ -4,13 +4,14 @@ from mongoengine import * from .client import Client from .usermanagement import Organisation, User +from .enumeration import ProcessStatusEnum class Project(Document): - project_id = StringField(required=True) + project_number = StringField(required=False) - client = LazyReferenceField(Client, + client_id = LazyReferenceField(Client, required=True, reverse_delete_rule=CASCADE) @@ -18,21 +19,23 @@ class Project(Document): wtf_options={"render_kw": { "step": "60" }}) + + status = EnumField(ProcessStatusEnum, default=ProcessStatusEnum.ONGOING) org_id = LazyReferenceField(Organisation, required=True, reverse_delete_rule=CASCADE) user_id = LazyReferenceField(User, - required=False, + required=True, reverse_delete_rule=DO_NOTHING) name = StringField(required=True) name_short = StringField(required=False) - tags = ListField(StringField()) + meta = { 'allow_inheritance': True, 'index_opts': {}, @@ -43,7 +46,8 @@ class Project(Document): "db_alias": 'dblabtests', 'indexes': [ [("name_short", 1)], + [("client_id", 1)], [("name", 1)], - [("project_id", 1)], + [("project_number", 1)], ] } diff --git a/src/paveit/datamodels/sheartest.py b/src/paveit/datamodels/sheartest.py index 5e9b074..6e90801 100755 --- a/src/paveit/datamodels/sheartest.py +++ b/src/paveit/datamodels/sheartest.py @@ -3,6 +3,7 @@ import datetime from mongoengine import * from .taskmanager import TaskManagerBase +from .usermanagement import User class DynamicShearTest(Document): @@ -13,6 +14,7 @@ class DynamicShearTest(Document): }}) task_id = LazyReferenceField(TaskManagerBase, required=True) + user_id = LazyReferenceField(User, required=True) gap_width = FloatField(default=1.0) @@ -140,28 +142,28 @@ class DynamicShearTestExtension(DynamicShearTest): s_vert_2_diff_std = FloatField() s_vert_2_diff_diff_rel = FloatField() ## S-Sum - s_vert_sum_amp = FloatField() - s_vert_sum_freq = FloatField() - s_vert_sum_phase = FloatField() - s_vert_sum_offset = FloatField() - s_vert_sum_slope = FloatField() - s_vert_sum_r2 = FloatField() - s_vert_sum_cycle_min = ListField(FloatField()) - s_vert_sum_min = FloatField() - s_vert_sum_min_std = FloatField() - s_vert_sum_min_diff_rel = FloatField() - s_vert_sum_cycle_max = ListField(FloatField()) - s_vert_sum_max = FloatField() - s_vert_sum_max_std = FloatField() - s_vert_sum_max_diff_rel = FloatField() - s_vert_sum_cycle_mean = ListField(FloatField()) - s_vert_sum_mean = FloatField() - s_vert_sum_mean_std = FloatField() - s_vert_sum_mean_diff_rel = FloatField() - s_vert_sum_cycle_diff = ListField(FloatField()) - s_vert_sum_diff = FloatField() - s_vert_sum_diff_std = FloatField() - s_vert_sum_diff_diff_rel = FloatField() + s_vert_mean_amp = FloatField() + s_vert_mean_freq = FloatField() + s_vert_mean_phase = FloatField() + s_vert_mean_offset = FloatField() + s_vert_mean_slope = FloatField() + s_vert_mean_r2 = FloatField() + s_vert_mean_cycle_min = ListField(FloatField()) + s_vert_mean_min = FloatField() + s_vert_mean_min_std = FloatField() + s_vert_mean_min_diff_rel = FloatField() + s_vert_mean_cycle_max = ListField(FloatField()) + s_vert_mean_max = FloatField() + s_vert_mean_max_std = FloatField() + s_vert_mean_max_diff_rel = FloatField() + s_vert_mean_cycle_mean = ListField(FloatField()) + s_vert_mean_mean = FloatField() + s_vert_mean_mean_std = FloatField() + s_vert_mean_mean_diff_rel = FloatField() + s_vert_mean_cycle_diff = ListField(FloatField()) + s_vert_mean_diff = FloatField() + s_vert_mean_diff_std = FloatField() + s_vert_mean_diff_diff_rel = FloatField() ## optional parameters ## S1 diff --git a/src/paveit/datamodels/taskmanager.py b/src/paveit/datamodels/taskmanager.py old mode 100644 new mode 100755 index 470632a..99e67e0 --- a/src/paveit/datamodels/taskmanager.py +++ b/src/paveit/datamodels/taskmanager.py @@ -8,6 +8,7 @@ from .material import Material from .project import Project from .usermanagement import Organisation, User from .workpackage import Workpackage +from .enumeration import ProcessStatusEnum class TaskManagerBase(Document): @@ -17,7 +18,7 @@ class TaskManagerBase(Document): project_id = LazyReferenceField(Project, required=True) wp_id = LazyReferenceField(Workpackage, required=False) - finieshed = BooleanField(default=False) + status = EnumField(ProcessStatusEnum, default=ProcessStatusEnum.ONGOING) task_added = DateTimeField(default=datetime.datetime.now, wtf_options={"r ender_kw": { diff --git a/src/paveit/datamodels/usermanagement.py b/src/paveit/datamodels/usermanagement.py index d43a0e3..01322d2 100755 --- a/src/paveit/datamodels/usermanagement.py +++ b/src/paveit/datamodels/usermanagement.py @@ -15,6 +15,9 @@ class Organisation(Document): labtest_citt = StringField(required=False) labtest_shear_extension = StringField(required=False) + + domain = StringField(required=True) + meta = { 'allow_inheritance': True, @@ -29,8 +32,6 @@ class Organisation(Document): class User(Document): - active = BooleanField(required=True, default=True) - org_id = LazyReferenceField(Organisation, required=True, reverse_delete_rule=CASCADE) @@ -40,11 +41,7 @@ class User(Document): "step": "60" }}) - name = StringField(required=False) - email = EmailField(required=True) - - password = StringField(required=True) meta = { 'allow_inheritance': True, diff --git a/src/paveit/helper/__init__.py b/src/paveit/helper/__init__.py index c841f41..911540d 100755 --- a/src/paveit/helper/__init__.py +++ b/src/paveit/helper/__init__.py @@ -1,10 +1,10 @@ from .filehandling import read_file_to_bytesio from .filehasher import calc_hash_of_bytes from .minio import get_minio_client_archive, get_minio_client_processing -from .mongo import connect_mongo_dbs, mongo_get_results +from .mongo import connect_mongo_db, mongo_get_results __all__ = [ - 'read_file_to_bytesio', 'connect_mongo_dbs', 'mongo_get_results', + 'read_file_to_bytesio', 'connect_mongo_db', 'mongo_get_results', 'get_minio_client_processing', 'get_minio_client_archive', 'calc_hash_of_bytes' ] diff --git a/src/paveit/helper/mongo.py b/src/paveit/helper/mongo.py index c61d425..f50e0fe 100755 --- a/src/paveit/helper/mongo.py +++ b/src/paveit/helper/mongo.py @@ -1,50 +1,21 @@ from bson import ObjectId from mongoengine import connect as mongo_connect from pandas import DataFrame +import os - -def connect_mongo_db_labtests(username='admin', - password='admin', - host='mongo', - authentication_source='admin'): - - mongo_connect('labtests', +def connect_mongo_db(username=os.environ['MONGO_USER'] , + password=os.environ['MONGO_PASSWD'] , + host=os.environ['MONGO_URI'], + dbname=os.environ['MONGO_DB'] ): + + c = mongo_connect(dbname, username=username, password=password, host=host, - authentication_source=authentication_source, + authentication_source='admin', alias='dblabtests') -def connect_mongo_db_usser(username='admin', - password='admin', - host='mongo', - authentication_source='admin'): - - mongo_connect('users', - username=username, - password=password, - host=host, - authentication_source=authentication_source, - alias='dbusers') - - -def connect_mongo_dbs(username='admin', - password='admin', - host='mongo', - authentication_source='admin'): - - connect_mongo_db_labtests(username=username, - password=password, - host=host, - authentication_source=authentication_source) - - connect_mongo_db_usser(username=username, - password=password, - host=host, - authentication_source=authentication_source) - - def mongo_upload_results(resultsmodel, results: DataFrame, datamodel, data: DataFrame, filehash: str, org_id: ObjectId, project_id: ObjectId, material_id: ObjectId, diff --git a/src/paveit/labtest/sheartest.py b/src/paveit/labtest/sheartest.py index fc902bc..e2d4459 100755 --- a/src/paveit/labtest/sheartest.py +++ b/src/paveit/labtest/sheartest.py @@ -88,7 +88,7 @@ class ShearTest(DataSineLoad): ('extension', 6)] self.columns_analyse = [ - 'F', 's_vert_sum', 's_vert_1', 's_vert_2', 's_hor_1', 's_hor_2', + 'F', 's_vert_mean', 's_vert_1', 's_vert_2', 's_hor_1', 's_hor_2', 's_hor_sum', 's_piston' ] @@ -106,6 +106,15 @@ class ShearTest(DataSineLoad): 's_hor_2': ['LVDT2 Series'], } + def _post_calc_missiong_values(self): + + cols = self.data.columns + + if not 's_vert_mean' in cols: + if ('s_vert_1' in self.data.columns) & ('s_vert_2' + in self.data.columns): + self.data['s_vert_mean'] = self.data[['s_vert_1', + 's_vert_2']].mean(axis=1) class ShearTestExtension(ShearTest): @@ -116,7 +125,6 @@ class ShearTestExtension(ShearTest): def save( self, - org_id: ObjectId, user_id: ObjectId, task_id: ObjectId, broken: bool, @@ -136,7 +144,8 @@ class ShearTestExtension(ShearTest): for idx_fit, fit in self.fit.iterrows(): data = self.data[idx_fit] - meta['task_id'] = org_id + meta['task_id'] = task_id + meta['user_id'] = user_id meta['gap_width'] = gap_width meta['filehash'] = self.filehash meta['speciment_name'] = self.filename @@ -303,17 +312,17 @@ class ShearTestExtension(ShearTest): ## Schersteifigkeit berechnen deltaF = res_temp['fit_F_amp'] - deltaS = res_temp['fit_s_vert_sum_amp'] + deltaS = res_temp['fit_s_vert_mean_amp'] A = np.pi * self.metadata['speciment_diameter']**2 / 4 - tau = deltaF / A - gamma = deltaS / self.gap_width + tau = deltaF / A #MPa + gamma = deltaS / self.gap_width # mm/mm - res_temp['G'] = tau / gamma + res_temp['G'] = tau / gamma #MPa # TODO: Überarbeiten und erweitern (ISSUE #2) res_temp['phase'] = res_temp['fit_F_phase'] - res_temp[ - 'fit_s_vert_sum_phase'] + 'fit_s_vert_mean_phase'] self.fit.append(res_temp)