diff --git a/backend/__pycache__/eventlog.cpython-311.pyc b/backend/__pycache__/eventlog.cpython-311.pyc index 5a184ea042192c06e08c539c206b3c7ac6a70461..692dca41b4233f88d2bc97b67507c346874a417e 100644 Binary files a/backend/__pycache__/eventlog.cpython-311.pyc and b/backend/__pycache__/eventlog.cpython-311.pyc differ diff --git a/backend/__pycache__/input.cpython-311.pyc b/backend/__pycache__/input.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f14b84e6bcefb3f57569b9936f2769cb4a4498ff Binary files /dev/null and b/backend/__pycache__/input.cpython-311.pyc differ diff --git a/backend/petrinet.py b/backend/petrinet.py index 23db0cc230d91a47b14f48c90508f998614e8703..cdfa96e9a9f8237ade1d98c4d31802b37713d8bc 100644 --- a/backend/petrinet.py +++ b/backend/petrinet.py @@ -2,6 +2,8 @@ from pm4py.objects.petri_net.obj import PetriNet, Marking from pm4py.objects.conversion.log import converter as log_converter import pm4py import pandas as pd +import eventlog +from collections import OrderedDict def generate_petri_net(): dataframe = pd.read_csv(r'Frontend\export\eventlog.csv', sep=',') @@ -14,9 +16,61 @@ def generate_petri_net(): event_log = pm4py.convert_to_event_log(dataframe) net, initial_marking, final_marking = pm4py.discover_petri_net_inductive(event_log) - print(net) - pm4py.view_petri_net(net, initial_marking, final_marking) + # print(net) + # pm4py.view_petri_net(net, initial_marking, final_marking) + + for t in net.transitions: + print("\nTransition: "+t.name) + + return net, initial_marking, final_marking + +def decorate_petri_net(case, rec, name): + activity_mapping = { + 1: 'place order', + 2: 'arrange standard order', + 3: 'arrange custom order', + 4: 'pick from stock A', + 5: 'pick from stock B', + 6: 'pick from stock C', + 7: 'manufacture A', + 8: 'manufacture B', + 9: 'pack A', + 10: 'pack B', + 11: 'pack C', + 12: 'attempt delivery A', + 13: 'attempt delivery B', + 14: 'attempt delivery C', + 15: 'order completed', + } + + net, initial_marking, final_marking = generate_petri_net() + state = eventlog.get_state(case, name) + events = state['case'] + + event_names = [] + for i in range(len(events)): + if events[i] == 1: + event_names.append(activity_mapping[i+1]) + + decoration = {} + rec_name = activity_mapping[rec] + + for t in net.transitions: + print(str(t.label)) + if str(t.label) in event_names: + decoration.update({t: {}}) + decoration[t].update({"color":"blue"}) + decoration[t].update({"label":t.label}) + elif str(t.label) == rec_name: + decoration.update({t: {}}) + decoration[t].update({"color":"green"}) + decoration[t].update({"label":t.label}) + + + pm4py.view_petri_net(net, initial_marking, final_marking, decorations = decoration) + + +decorate_petri_net(5, 15, "optis") -generate_petri_net()