From 3177f3c5c6a5657772acbe046ccc98a19cdec561 Mon Sep 17 00:00:00 2001
From: Aleksandra <aleks.dimitrova.21@gmail.com>
Date: Wed, 28 Jun 2023 15:17:11 +0200
Subject: [PATCH] petri net visualisation ready

---
 backend/__pycache__/eventlog.cpython-311.pyc | Bin 8568 -> 8568 bytes
 backend/__pycache__/input.cpython-311.pyc    | Bin 0 -> 402 bytes
 backend/petrinet.py                          |  60 ++++++++++++++++++-
 3 files changed, 57 insertions(+), 3 deletions(-)
 create mode 100644 backend/__pycache__/input.cpython-311.pyc

diff --git a/backend/__pycache__/eventlog.cpython-311.pyc b/backend/__pycache__/eventlog.cpython-311.pyc
index 5a184ea042192c06e08c539c206b3c7ac6a70461..692dca41b4233f88d2bc97b67507c346874a417e 100644
GIT binary patch
delta 20
bcmez2^uvjJIWI340|Ns??VH&fxpNf(N>&D$

delta 20
ccmez2^uvjJIWI340|NuY)BQ6ya_1@n08ADJ(f|Me

diff --git a/backend/__pycache__/input.cpython-311.pyc b/backend/__pycache__/input.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f14b84e6bcefb3f57569b9936f2769cb4a4498ff
GIT binary patch
literal 402
zcmZ3^%ge>Uz`$UzVP?u{1_p-5APx*OLK&Y07#J9)Go&y?F{CiIFhnt?Fa<McGFLfp
z1r(*0q~@h4lw@QUD`XZclw_nTBqb(ir{<;TDR`DB6ldlZ<WwqTl@^yM6s4Aw7Ud~q
zmZ%piWabr=mgsRM!)yRq#KgeBz|6qF@R<i}TMa`BV-*7fLokCTlV6pRLPlb-LQ-mK
zo<c!UesXGYacYV}QYEs5D;YEyZ?S?+E(V#a@Jln<DkiizwWv5IF();<I3~ZKB(pd^
zv7jIZ>c$wbYQ2KWTg++s`9*9D3=AM#%*VjM(7<qmTi}AQ`9*H?3oPcJK`!*uWV*#3
zAD@z+93Kx>Tm*7&5jz6|LlG+j1H&&4o80`A(wtPgB2ESd29P6)H5eEeJ}@&fGJarU
UVr2Qi03x^;87)3AU=m=H0K`RP8vp<R

literal 0
HcmV?d00001

diff --git a/backend/petrinet.py b/backend/petrinet.py
index 23db0cc..cdfa96e 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()
 
 
-- 
GitLab