Skip to content
Snippets Groups Projects
Commit 7a75dc5a authored by Ahmed Osman's avatar Ahmed Osman
Browse files

merge

parents 02c2272c d36567f6
No related branches found
No related tags found
No related merge requests found
stages: stages:
- build - build
- triage
- run
build: build:
image: debian:stable image: debian:oldstable
stage: build stage: build
script: script:
- apt-get update && apt-get -y install graphviz openjdk-11-jre-headless wget - apt-get update && apt-get -y install graphviz openjdk-11-jre-headless wget
...@@ -15,50 +13,3 @@ build: ...@@ -15,50 +13,3 @@ build:
artifacts: artifacts:
paths: paths:
- public - public
\ No newline at end of file
build-image:build:
stage: build
tags:
- docker
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:latest
only:
- master
- docker-dzwald
dry-run:triage:
image: ruby:2.5
stage: triage
script:
- gem install activesupport -v 6.1.4.4
- gem install gitlab-triage
- gitlab-triage --help
- gitlab-triage --dry-run --token $API_TOKEN --source projects --source-id $CI_PROJECT_PATH --host-url https://git-ce.rwth-aachen.de/
when: manual
except:
- schedules
policy:run:
image: ruby:2.5
stage: run
script:
- gem install activesupport -v 6.1.4.4
- gem install gitlab-triage
- gitlab-triage --token $API_TOKEN --source projects --source-id $CI_PROJECT_PATH --host-url https://git-ce.rwth-aachen.de
when: manual
except:
- schedules
schedule:policyrun:
image: ruby:2.5
stage: run
script:
- gem install activesupport -v 6.1.4.4
- gem install gitlab-triage
- gitlab-triage --token $API_TOKEN --source projects --source-id $CI_PROJECT_PATH --host-url https://git-ce.rwth-aachen.de
only:
- schedules
resource_rules:
issues:
rules:
- name: find all issues of milestone AP 0 and set label wp 0
conditions:
milestone: AP 0 - Projektmanagement und Dissemination
actions:
labels:
- WP 0
- name: find all issues of milestone AP 1 and set label wp 1
conditions:
milestone: AP 1 - Definition der Anwendungsszenarien
actions:
labels:
- WP 1
- name: find all issues of milestone AP 2 and set label wp 2
conditions:
milestone: AP 2 - Integration von BaSys 4 und WH4.0
actions:
labels:
- WP 2
- name: find all issues of milestone AP 3 and set label wp 3
conditions:
milestone: AP 3 - Entwicklung eines DZ Wald
actions:
labels:
- WP 3
- name: find all issues of milestone AP 4 and set label wp 4
conditions:
milestone: AP 4 - Integration eines Waldmanagementsystems
actions:
labels:
- WP 4
- name: find all issues of milestone AP 5 and set label wp 5
conditions:
milestone: AP 5 - Integration einer Holzhandelsplattform
actions:
labels:
- WP 5
- name: find all issues of milestone AP 6 and set label wp 6
conditions:
milestone: AP 6 - Entwicklung einer Demo-Applikation für die Abnehmerseite
actions:
labels:
- WP 6
- name: find all issues of milestone AP 7 and set label wp 7
conditions:
milestone: AP 7 - Integration Holzaufnahme-App
actions:
labels:
- WP 7
- name: find all issues of milestone AP 8 and set label wp 8
conditions:
milestone: AP 8 - Integration, Demonstration und Dokumentation der Ergebnisse
actions:
labels:
- WP 8
import os, sys, inspect import os, sys, inspect
from typing import List, Set import re
from typing import List
import basyx import basyx
from basyx.aas import model from basyx.aas import model
...@@ -49,14 +50,15 @@ def create_sortiment(): ...@@ -49,14 +50,15 @@ def create_sortiment():
sortimentstyp=enums.Sortimentstyp.Stammholz, sortimentstyp=enums.Sortimentstyp.Stammholz,
sorte=enums.Sorte.lang, sorte=enums.Sorte.lang,
holzart=enums.Holzart.Fichte, holzart=enums.Holzart.Fichte,
gueteklasse=enums.Gueteklasse.Qualitaet_A, gueteklasseVon=enums.Gueteklasse.Qualitaet_A,
gueteklasseBis=enums.Gueteklasse.Qualitaet_B,
laenge_von=3.0, laenge_von=3.0,
laenge_bis=6.0, laenge_bis=6.0,
mindestzopf=1.0, mindestzopf=1.0,
max_durchmesser=10.0, max_durchmesser=10.0,
laengenzugabe=10.0, laengenzugabe=10.0,
mengenschaetzung=10.0, mengenschaetzung=10.0,
kaeufer=models.Kontakt(kontaktrolle=enums.Kontaktrolle.Kaeufer), kaeufer=create_example_contact(kontaktrolle=enums.Kontaktrolle.Kaeufer),
ergebnis=[model.ModelReference.from_referable(create_holzliste())] ergebnis=[model.ModelReference.from_referable(create_holzliste())]
) )
return sortiment return sortiment
...@@ -67,11 +69,11 @@ def create_arbeitsauftrag(): ...@@ -67,11 +69,11 @@ def create_arbeitsauftrag():
auftrag_id=model.Identifier("https://www.company.com/submodels/arbeitsauftrag"), auftrag_id=model.Identifier("https://www.company.com/submodels/arbeitsauftrag"),
hiebsnummer="abc123", hiebsnummer="abc123",
kurzbeschreibung="beschreibung", kurzbeschreibung="beschreibung",
ansprechpartner=models.Kontakt( ansprechpartner=create_example_contact(
kontaktrolle=enums.Kontaktrolle.Waldbesitzer), kontaktrolle=enums.Kontaktrolle.Waldbesitzer),
unternehmer_holzrueckung=models.Kontakt( unternehmer_holzrueckung=create_example_contact(
kontaktrolle=enums.Kontaktrolle.UnternehmerHolzrueckung), kontaktrolle=enums.Kontaktrolle.UnternehmerHolzrueckung),
unternehmer_holzernte=models.Kontakt( unternehmer_holzernte=create_example_contact(
kontaktrolle=enums.Kontaktrolle.UnternehmerHolzernte), kontaktrolle=enums.Kontaktrolle.UnternehmerHolzernte),
zu_faellende_baeume=models.ModelReference.from_referable( zu_faellende_baeume=models.ModelReference.from_referable(
create_zu_faellende_baeume()), create_zu_faellende_baeume()),
...@@ -116,7 +118,7 @@ def create_lieferant_contact(): ...@@ -116,7 +118,7 @@ def create_lieferant_contact():
anrede="Herr", anrede="Herr",
vorname="Waldemar", vorname="Waldemar",
nachname="Schwarz", nachname="Schwarz",
adresse="Turmstr. 15, Aachen 52072", adresse="Turmstr. 15, Aachen 52064",
telefonnummern=["0241-123456", "0176-123456"], telefonnummern=["0241-123456", "0176-123456"],
emailadressen=["schwarz@waldemar.de"], emailadressen=["schwarz@waldemar.de"],
umsatzbesteuerung=enums.Umsatzbesteuerung.regelbesteuert, umsatzbesteuerung=enums.Umsatzbesteuerung.regelbesteuert,
...@@ -131,12 +133,14 @@ def create_preismatrix(): ...@@ -131,12 +133,14 @@ def create_preismatrix():
models.Preismatrixeintrag(preis=50.5, models.Preismatrixeintrag(preis=50.5,
mittendurchmesser_von=45.0, mittendurchmesser_von=45.0,
mittendurchmesser_bis=55.0, mittendurchmesser_bis=55.0,
gueteklasse=enums.Gueteklasse.Normale_Qualitaet gueteklasse_von=enums.Gueteklasse.Normale_Qualitaet,
gueteklasse_bis=enums.Gueteklasse.Normale_Qualitaet
), ),
models.Preismatrixeintrag(preis=50.5, models.Preismatrixeintrag(preis=50.5,
mittendurchmesser_von=55.0, mittendurchmesser_von=55.0,
mittendurchmesser_bis=65.0, mittendurchmesser_bis=65.0,
gueteklasse=enums.Gueteklasse.Qualitaet_A gueteklasse_von=enums.Gueteklasse.Qualitaet_A,
gueteklasse_bis=enums.Gueteklasse.Qualitaet_A
), ),
] ]
return preismatrix return preismatrix
...@@ -170,8 +174,8 @@ def create_holzliste(): ...@@ -170,8 +174,8 @@ def create_holzliste():
hieb=enums.Hieb.Durchforstung, hieb=enums.Hieb.Durchforstung,
ernte=(datetime.date(2023, 12, 1), datetime.date(2023, 12, 31)), ernte=(datetime.date(2023, 12, 1), datetime.date(2023, 12, 31)),
lieferant=create_lieferant_contact(), lieferant=create_lieferant_contact(),
kaeufer=models.Kontakt(kontaktrolle=enums.Kontaktrolle.Kaeufer), kaeufer=create_example_contact(kontaktrolle=enums.Kontaktrolle.Kaeufer),
fuhrmann=models.Kontakt(kontaktrolle=enums.Kontaktrolle.Fuhrmann), fuhrmann=create_example_contact(kontaktrolle=enums.Kontaktrolle.Fuhrmann),
notiz="Dieses Holz ist sehr gut" notiz="Dieses Holz ist sehr gut"
) )
...@@ -272,7 +276,6 @@ def create_zu_faellende_baeume(): ...@@ -272,7 +276,6 @@ def create_zu_faellende_baeume():
zufaellendebaeume = models.ZuFaellendeBaeume( zufaellendebaeume = models.ZuFaellendeBaeume(
id="https://www.company.com/submodels/zu_faellende_baeume", id="https://www.company.com/submodels/zu_faellende_baeume",
name="Baueme zu faellen",
beschreibung="Baueme sollen demnaechst gefaellt werden", beschreibung="Baueme sollen demnaechst gefaellt werden",
umring=umring, umring=umring,
position=create_standort(), position=create_standort(),
...@@ -330,7 +333,7 @@ def create_bestandesdaten(): ...@@ -330,7 +333,7 @@ def create_bestandesdaten():
bestandesdaten = models.Bestandesdaten( bestandesdaten = models.Bestandesdaten(
id=model.Identifier("https://www.company.com/submodels/bestandesdaten"), id=model.Identifier("https://www.company.com/submodels/bestandesdaten"),
umring=create_umring(), umring=create_umring(),
waldbesitzer=models.Kontakt(kontaktrolle=enums.Kontaktrolle.Waldbesitzer), waldbesitzer=create_example_contact(kontaktrolle=enums.Kontaktrolle.Waldbesitzer),
baumarten=[enums.Holzart.Fichte] baumarten=[enums.Holzart.Fichte]
) )
...@@ -373,6 +376,44 @@ def create_aas(): ...@@ -373,6 +376,44 @@ def create_aas():
zu_faellende_baeume, zu_faellende_baeume,
events events
] ]
def remove_iteration_ending(val: str):
# remove iteration ending like {00}
val = re.sub(r'\{\d+\}$', '', val)
# remove one or more digits at the end
val = re.sub(r'_?\d+$', '', val)
return val
def set_semantic_id(referable: model.SubmodelElement):
# example = "https://admin-shell.io/kwh40/forestml40/Waldweg/0/1/Beschreibung"
if isinstance(referable, model.Submodel):
base = "https://admin-shell.io/kwh40/forestml40"
postfix = f"{referable.id_short}/0/1"
else:
base = referable.parent.semantic_id.key[0].value
postfix = remove_iteration_ending(referable.id_short)
referable.semantic_id = model.GlobalReference(
(basyx.aas.model.Key(model.KeyTypes.GLOBAL_REFERENCE,
f"{base}/{postfix}"),)
)
def set_semantic_id_for_each_in(obj):
set_semantic_id(obj)
try:
iter(obj)
except TypeError as e:
print(e)
return
se_objects = list(obj)
for se in se_objects:
set_semantic_id_for_each_in(se)
for submodel in submodels:
set_semantic_id_for_each_in(submodel)
aas_dz_wald = models.DZWald( aas_dz_wald = models.DZWald(
dzwald_id="https://www.company.com/dz_wald/1", dzwald_id="https://www.company.com/dz_wald/1",
asset=basyx.aas.model.AssetInformation(), asset=basyx.aas.model.AssetInformation(),
...@@ -396,7 +437,7 @@ def write_aas(): ...@@ -396,7 +437,7 @@ def write_aas():
objstore = basyx.aas.model.DictObjectStore(submodels) objstore = basyx.aas.model.DictObjectStore(submodels)
objstore.add(aas) objstore.add(aas)
with open("dz_wald_example.json", "w") as file: with open("dz_wald_example.json", "w", encoding='utf-8') as file:
json_serialization.write_aas_json_file(file, objstore) json_serialization.write_aas_json_file(file, objstore)
... ...
......
This diff is collapsed.
import os, sys, inspect
from typing import List
import basyx
from basyx.aas import model
from basyx.aas.adapter.json import json_serialization
import datetime
from model import enums, generic_model
def create_arbeitsauftrag():
arbeitsauftrag = generic_model.Arbeitsauftrag(
id_="https://www.company.com/submodels/arbeitsauftrag",
hiebsnummer="abc123",
kurzbeschreibung="beschreibung",
ansprechpartner=generic_model.Arbeitsauftrag.Ansprechpartner(),
unternehmerHolzrueckung=generic_model.Arbeitsauftrag.UnternehmerHolzrueckung(),
unternehmerHolzernte=generic_model.Arbeitsauftrag.UnternehmerHolzernte(),
sortimente=[create_sortiment()],
zuFaellendeBaeume=model.ModelReference.from_referable(create_zu_faellende_baeume())
)
return arbeitsauftrag
def create_sortiment():
sortiment = generic_model.Arbeitsauftrag.Sortimente.Sortiment(
nummer=1,
sortimentstyp=enums.Sortimentstyp.Stammholz.value,
sorte=enums.Sorte.lang.value,
holzart=enums.Holzart.Fichte.value,
gueteklasseVon=enums.Gueteklasse.Qualitaet_A.value,
gueteklasseBis=enums.Gueteklasse.Qualitaet_B.value,
laengeVon=3.0,
laengeBis=6.0,
mindestzopf=1.0,
maxDurchmesser=10.0,
laengenzugabe=10.0,
mengenschaetzung=10.0,
bemerkung="Bemerkung",
ergebnis=generic_model.Arbeitsauftrag.Sortimente.Sortiment.Ergebnis([model.ModelReference.from_referable(create_holzliste())]),
kaeufer=generic_model.Arbeitsauftrag.Sortimente.Sortiment.Kaeufer(kontaktrolle=enums.Kontaktrolle.Kaeufer.value)
)
return sortiment
def create_zu_faellende_baeume():
umring = generic_model.ZuFaellendeBaeume.Umring(
name="name", beschreibung="beschreibung",
koordinaten=generic_model.ZuFaellendeBaeume.Umring.Koordinaten([
generic_model.ZuFaellendeBaeume.Umring.Koordinaten.Koordinate(x=30.00004, y=120.80),
generic_model.ZuFaellendeBaeume.Umring.Koordinaten.Koordinate(x=31.00004, y=121.80),
generic_model.ZuFaellendeBaeume.Umring.Koordinaten.Koordinate(x=32.00004, y=122.80),
]))
zufaellendebaeume = generic_model.ZuFaellendeBaeume(
id_="https://www.company.com/submodels/zu_faellende_baeume",
beschreibung="Baueme sollen demnaechst gefaellt werden",
umring=umring,
position=generic_model.ZuFaellendeBaeume.Position(
koordinate=generic_model.ZuFaellendeBaeume.Position.Koordinate(x=31.00004, y=121.80),
notiz="Die Position"
),
baumliste=(
generic_model.ZuFaellendeBaeume.Baumliste.StehenderBaum(
hoehe=15.3, bhd=20.2, baumart=enums.Holzart.Buche.value,
position=generic_model.ZuFaellendeBaeume.Baumliste.StehenderBaum.Position(
koordinate=generic_model.ZuFaellendeBaeume.Position.Koordinate(x=31.00004, y=121.80),
notiz="Position"
)),
),
)
return zufaellendebaeume
def create_holzliste():
kopfdaten = generic_model.Holzliste.Kopfdaten(
projekt="Eslohe2023",
hieb=enums.Hieb.Durchforstung.value,
ernte=generic_model.Holzliste.Kopfdaten.Ernte(min=datetime.date(2023, 12, 1), max=datetime.date(2023, 12, 31)),
lieferant=generic_model.Holzliste.Kopfdaten.Lieferant(),
kaeufer=generic_model.Holzliste.Kopfdaten.Kaeufer(),
fuhrmann=generic_model.Holzliste.Kopfdaten.Fuhrmann(),
notiz="Dieses Holz ist sehr gut"
)
messergebnis_einzelstammliste = generic_model.Holzliste.PolterListe.Polter.Messergebnis_EinzelstammListe(
generic_model.Holzliste.PolterListe.Polter.Messergebnis_EinzelstammListe.Einzelstaemme([
generic_model.Holzliste.PolterListe.Polter.Messergebnis_EinzelstammListe.Einzelstaemme.Einzelstamm(
menge=3.4,
stammlaenge=4.2,
stammnummer="1",
mittendurchmesser=47.0,
gueteklasse=enums.Gueteklasse.Normale_Qualitaet.value
)
])
)
polter = generic_model.Holzliste.PolterListe.Polter(
polternummer="100",
vermessungsverfahren=enums.Vermessungsverfahren.Mittenstaerkenvermessung.value,
polterstatus=enums.Polterstatus.Vermessen.value,
messergebnis_EinzelstammListe=messergebnis_einzelstammliste,
standort=generic_model.Holzliste.PolterListe.Polter.Standort(
koordinate=generic_model.Holzliste.PolterListe.Polter.Standort.Koordinate(x=31.00004, y=121.80),
notiz="Die Position"
),
fotos=[
"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Altenbrak_Holz.JPG/1920px-Altenbrak_Holz.JPG",
"https://de.wikipedia.org/wiki/Polter#/media/Datei:Baumst%C3%A4mme_bei_St%C3%BCbeckshorn.jpg"],
videos=["https://www.youtube.com/watch?v=b65SSRfDwUo"],
)
holzliste = generic_model.Holzliste(
id_="https://www.company.com/holzliste/1",
kopfdaten=kopfdaten,
polterListe=generic_model.Holzliste.PolterListe([polter]),
sortimentstyp=enums.Sortimentstyp.Stammholz.value,
sorte=enums.Sorte.lang.value,
holzart=enums.Holzart.Fichte.value)
return holzliste
def create_aas():
arbeitsauftrag = create_arbeitsauftrag()
holzliste = create_holzliste()
zu_faellende_baeume = create_zu_faellende_baeume()
submodels = [
arbeitsauftrag,
holzliste,
zu_faellende_baeume,
]
aas_dz_wald = model.AssetAdministrationShell(
id_="https://www.company.com/dz_wald/1",
id_short="DZWald",
asset_information=model.AssetInformation(),
submodel=submodels
)
return aas_dz_wald, submodels
def write_aas():
aas, submodels = create_aas()
objstore = basyx.aas.model.DictObjectStore(submodels)
objstore.add(aas)
with open("generic_dz_wald_example.json", "w", encoding='utf-8') as file:
json_serialization.write_aas_json_file(file, objstore)
if __name__ == "__main__":
write_aas()
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
from copy import deepcopy
from enum import Enum from enum import Enum
from typing import Any, Iterable from typing import Any, Iterable
...@@ -47,7 +48,7 @@ def init_items_and_add_to_se_list(se_list, values_of_items: Iterable[Any], item_ ...@@ -47,7 +48,7 @@ def init_items_and_add_to_se_list(se_list, values_of_items: Iterable[Any], item_
if isinstance(val, Enum): if isinstance(val, Enum):
val = val.value val = val.value
# create item e.g. Property(value="example@email.de", value_type=str, ...) # create item e.g. Property(value="example@email.de", value_type=str, ...)
item = item_type(value=val, **item_kwargs) item = item_type(value=val, **deepcopy(item_kwargs))
# find free id_short in SubmodelElementList and set item's id_short to it # find free id_short in SubmodelElementList and set item's id_short to it
item.id_short = find_next_free_id_short(collection=se_list, item.id_short = find_next_free_id_short(collection=se_list,
id_short_base=item_kwargs[ID_SHORT], id_short_base=item_kwargs[ID_SHORT],
... ...
......
This diff is collapsed.
...@@ -58,7 +58,6 @@ class Beobachtung <<Submodel>>{ ...@@ -58,7 +58,6 @@ class Beobachtung <<Submodel>>{
} }
class ZuFaellendeBaeume <<Submodel>>{ class ZuFaellendeBaeume <<Submodel>>{
Name: String [1]
Beschreibung: String [1] Beschreibung: String [1]
Umring: SEC.Umring [1] Umring: SEC.Umring [1]
Position: SEC.Standort [0..1] Position: SEC.Standort [0..1]
...@@ -92,7 +91,10 @@ class Preismatrixeintrag <<SubmodelElementCollection>>{ ...@@ -92,7 +91,10 @@ class Preismatrixeintrag <<SubmodelElementCollection>>{
Preis: Float [1] Preis: Float [1]
MittendurchmesserVon: Float [0..1] MittendurchmesserVon: Float [0..1]
MittendurchmesserBis: Float [0..1] MittendurchmesserBis: Float [0..1]
Gueteklasse: ENUM.Gueteklasse [0..1] GueteklasseVon: ENUM.Gueteklasse [0..1]
GueteklasseBis: ENUM.Gueteklasse [0..1]
Sortimentstyp: ENUM.Sortimentstyp [0..1]
Sorte: ENUM.Sorte [0..1]
} }
Verkaufslos *--> "0..*" Preismatrixeintrag Verkaufslos *--> "0..*" Preismatrixeintrag
...@@ -154,7 +156,6 @@ class Holzliste <<Submodel>>{ ...@@ -154,7 +156,6 @@ class Holzliste <<Submodel>>{
Holzart: ENUM.Holzart [1] Holzart: ENUM.Holzart [1]
' https://eldatstandard.de/dokumentation/1.0.2/species ' https://eldatstandard.de/dokumentation/1.0.2/species
Holzlistenstatus: ENUM.Holzlistenstatus[1] Holzlistenstatus: ENUM.Holzlistenstatus[1]
Preismatrix: SEList.SEC.Preismatrixeintrag [0..n]
} }
class Kopfdaten <<SubmodelElementCollection>>{ class Kopfdaten <<SubmodelElementCollection>>{
...@@ -174,7 +175,6 @@ class Kopfdaten <<SubmodelElementCollection>>{ ...@@ -174,7 +175,6 @@ class Kopfdaten <<SubmodelElementCollection>>{
class Kontakt <<SubmodelElementCollection>>{ class Kontakt <<SubmodelElementCollection>>{
'https://eldatstandard.de/dokumentation/1.0.2/consumer 'https://eldatstandard.de/dokumentation/1.0.2/consumer
Kontaktrolle: ENUM.Kontaktrolle [1]
Firmenname: String [0..1] Firmenname: String [0..1]
Anrede: String [0..1] Anrede: String [0..1]
Vorname: String [0..1] Vorname: String [0..1]
...@@ -195,9 +195,8 @@ class Polter <<SubmodelElementCollection>> { ...@@ -195,9 +195,8 @@ class Polter <<SubmodelElementCollection>> {
Messergebnis_RaummassIndustrieholz : SEC.RaummassIndustrieholz [0..1] Messergebnis_RaummassIndustrieholz : SEC.RaummassIndustrieholz [0..1]
Messergebnis_RaummassEnergieholz : SEC.RaummassEnergieholz [0..1] Messergebnis_RaummassEnergieholz : SEC.RaummassEnergieholz [0..1]
Polterstatus: ENUM.Polterstatus [1] Polterstatus: ENUM.Polterstatus [1]
Fotos: SEList.URL|Base64 [0..*] Fotos: SEList.URL [0..*]
Videos: SEList.URL [0..*] Videos: SEList.URL [0..*]
'Foto TBD
} }
class Standort <<SubmodelElementCollection>> { class Standort <<SubmodelElementCollection>> {
...@@ -246,7 +245,6 @@ class RaummassEnergieholz <<SubmodelElementCollection>> { ...@@ -246,7 +245,6 @@ class RaummassEnergieholz <<SubmodelElementCollection>> {
Holzliste *-> Kopfdaten Holzliste *-> Kopfdaten
'Kopfdaten --> Kontakt 'Kopfdaten --> Kontakt
Holzliste --> "0..*" Preismatrixeintrag
Holzliste *-- "*" Polter Holzliste *-- "*" Polter
Polter *-- "0..1" RaummassIndustrieholz Polter *-- "0..1" RaummassIndustrieholz
Polter *-- "0..1" RaummassEnergieholz Polter *-- "0..1" RaummassEnergieholz
... ...
......
...@@ -262,17 +262,6 @@ enum Hieb{ ...@@ -262,17 +262,6 @@ enum Hieb{
} }
note top #FF0000: TODO Eigendefinition? note top #FF0000: TODO Eigendefinition?
enum Kontaktrolle{
Waldbesitzer
Lieferant
Verkaeufer
Kaeufer
Fuhrmann
UnternehmerHolzernte
UnternehmerHolzrueckung
}
note top: Eigendefinition
enum Bereitstellungsart{ enum Bereitstellungsart{
uws - Unfrei Waldstraße uws - Unfrei Waldstraße
uwe - Unfrei Werk uwe - Unfrei Werk
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment