Comboboxen in gui integriert
This commit is contained in:
+195
-127
@@ -3,6 +3,7 @@ from tkinter import ttk
|
||||
from tkinter import filedialog
|
||||
from controller import Controller
|
||||
from caditem import CadItem
|
||||
import json
|
||||
|
||||
#import logging
|
||||
|
||||
@@ -11,7 +12,7 @@ from caditem import CadItem
|
||||
|
||||
def OnMouseWheel(self,event):
|
||||
self.scrollbar1.yview("scroll",event.delta,"units")
|
||||
return "break"
|
||||
return "break"
|
||||
|
||||
class AllFrames():
|
||||
""" enthält alle gleichen Methoden für die Widgets in der rechte Spalte
|
||||
@@ -228,11 +229,11 @@ class RightFramePDM(AllFrames):
|
||||
pdmkategorie_label = ttk.Label(frame, text="PDM-Kategorie:" )
|
||||
pdmkategorie_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.pdm_category = tk.StringVar()
|
||||
pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category)
|
||||
pdmkategorie_combo['values'] = categories
|
||||
pdmkategorie_combo['state'] = 'readonly'
|
||||
pdmkategorie_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_pdm_kategorie_neu'))
|
||||
pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category)
|
||||
self.pdmkategorie_combo['values'] = categories
|
||||
self.pdmkategorie_combo['state'] = 'readonly'
|
||||
self.pdmkategorie_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_pdm_kategorie_neu'))
|
||||
self.pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Neuaufbau
|
||||
@@ -240,26 +241,26 @@ class RightFramePDM(AllFrames):
|
||||
neuaufbau_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.neuaufbau = None
|
||||
neuaufbau_checkbutton = ttk.Checkbutton(frame,
|
||||
self.neuaufbau_checkbutton = ttk.Checkbutton(frame,
|
||||
#text='ja',
|
||||
variable=self.neuaufbau,
|
||||
command=lambda: self.callback("cb_neuaufbau"),
|
||||
onvalue=True,
|
||||
offvalue=False)
|
||||
neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# aus Halbzeug
|
||||
halbzeug_label = ttk.Label(frame, text="aus Halbzeug:")
|
||||
halbzeug_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.aus_halbzeug_neu = None
|
||||
aushalbzeug_checkbuttonr = ttk.Checkbutton(frame,
|
||||
self.aushalbzeug_checkbutton = ttk.Checkbutton(frame,
|
||||
#text='neu',
|
||||
variable=self.aus_halbzeug_neu,
|
||||
command=lambda: self.callback("cb_aus_halbzeug_neu"),
|
||||
onvalue=True,
|
||||
offvalue=False)
|
||||
aushalbzeug_checkbuttonr.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.aushalbzeug_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Halbzeugnummer
|
||||
@@ -287,26 +288,26 @@ class RightFramePDM(AllFrames):
|
||||
self.rownum += 1
|
||||
|
||||
# Lebenszyklusstatus
|
||||
lstatus = configs.Allgemein.get_options("Lebenszyklus") # Serie, Prototyp
|
||||
#lstatus = configs.Allgemein.get_options("Lebenszyklus") # Serie, Prototyp
|
||||
lebenszyklusstatus_label = ttk.Label(frame, text="Lebenszyklusstatus:")
|
||||
lebenszyklusstatus_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.lebenszyklus_status_neu = tk.StringVar()
|
||||
lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu)
|
||||
lebenszyklusstatus_combo['values'] = lstatus
|
||||
lebenszyklusstatus_combo['state'] = 'readonly'
|
||||
lebenszyklusstatus_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_lebenszyklus_status_neu'))
|
||||
lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu)
|
||||
#self.lebenszyklusstatus_combo['values'] = lstatus
|
||||
self.lebenszyklusstatus_combo['state'] = 'readonly'
|
||||
self.lebenszyklusstatus_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_lebenszyklus_status_neu'))
|
||||
self.lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# 3D Model Filesearch
|
||||
model3d_label = ttk.Label(frame, text="3D-Modell:" )
|
||||
model3d_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.model3d_neu = tk.StringVar()
|
||||
model3d_combo = ttk.Combobox(frame, textvariable=self.model3d_neu)
|
||||
model3d_combo['values'] = ['pfad1 Teilenummer in Dateinamen','pfad2 Teilenummer in Dateinamen']
|
||||
model3d_combo['state'] = 'readonly'
|
||||
model3d_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_3Dmodel_neu'))
|
||||
model3d_combo.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.model3d_combo = ttk.Combobox(frame, textvariable=self.model3d_neu)
|
||||
self.model3d_combo['values'] = ['pfad1 Teilenummer in Dateinamen','pfad2 Teilenummer in Dateinamen']
|
||||
self.model3d_combo['state'] = 'readonly'
|
||||
self.model3d_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_3Dmodel_neu'))
|
||||
self.model3d_combo.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
#toplevel = tk.Toplevel()
|
||||
#toplevel.title("search Window")
|
||||
#filename = filedialog.askopenfilename(
|
||||
@@ -314,7 +315,7 @@ class RightFramePDM(AllFrames):
|
||||
# title="Browse File"
|
||||
#)
|
||||
self.rownum += 1
|
||||
|
||||
|
||||
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3)
|
||||
@@ -332,7 +333,6 @@ class RightFramePDM(AllFrames):
|
||||
return "schulung"
|
||||
|
||||
def get_data(self):
|
||||
|
||||
return {
|
||||
"datenbank": self.get_database_str(),
|
||||
"pdm_kategorie_neu": self.pdm_category.get(),
|
||||
@@ -342,6 +342,10 @@ class RightFramePDM(AllFrames):
|
||||
"halbzeuglaenge_neu": self.halbzeuglaenge_neu.get(),
|
||||
"halbzeugoberflaeche_neu":self.halbzeugoberflaeche_neu.get(),
|
||||
"lebenszyklus_status_neu": self.lebenszyklus_status_neu.get(),
|
||||
# ab hier die Dropdowns der Oberfläche auslesen.
|
||||
"cb_lebenszyklus_status_neu": self.lebenszyklusstatus_combo['values'],
|
||||
"cb_3Dmodel_neu": self.model3d_combo['values'],
|
||||
"cb_pdm_kategorie_neu": self.pdmkategorie_combo['values'],
|
||||
}
|
||||
|
||||
def data_from_model(self):
|
||||
@@ -361,7 +365,14 @@ class RightFramePDM(AllFrames):
|
||||
if 'lebenszyklus_status_neu' in data:
|
||||
self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"])
|
||||
if 'aus_halbzeug_neu' in data:
|
||||
self.aus_halbzeug_neu= data["aus_halbzeug_neu"]
|
||||
self.aus_halbzeug_neu= data["aus_halbzeug_neu"]
|
||||
# ab hier die Dropdowns der Oberfläche befüllen.
|
||||
if 'cb_3Dmodel_neu' in data:
|
||||
self.model3d_combo['values'] = data["cb_3Dmodel_neu"]
|
||||
if 'cb_lebenszyklus_status_neu' in data:
|
||||
self.lebenszyklusstatus_combo['values'] = data["cb_lebenszyklus_status_neu"]
|
||||
if 'cb_pdm_kategorie_neu' in data:
|
||||
self.pdmkategorie_combo['values'] = data["cb_pdm_kategorie_neu"]
|
||||
|
||||
class RightFrameBezeichnung(AllFrames):
|
||||
def __init__(self, frame, nrow=0, configs=None):
|
||||
@@ -374,7 +385,7 @@ class RightFrameBezeichnung(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
|
||||
# Bezeichnung 1
|
||||
bezeichnung1_label = ttk.Label(frame, text="Bezeichnung 1:" )
|
||||
@@ -430,8 +441,8 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
ruestcodes = configs.Allgemein.get_options("Ruestcode")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
ruestcodes = configs.Allgemein.get_options("Ruestcode")
|
||||
|
||||
# Halbzeug ohne Sägeliste
|
||||
halbzeugOhneSaege_label = ttk.Label(frame, text="Halbzeug ohne Sägeliste:" )
|
||||
@@ -441,11 +452,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
halbzeugOhneSaege_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.halbzeugOhneSaege_neu = tk.StringVar()
|
||||
halbzeugOhneSaege_neu_combo = ttk.Combobox(frame, textvariable=self.halbzeugOhneSaege_neu)
|
||||
halbzeugOhneSaege_neu_combo['values'] = ['ja','nein']
|
||||
halbzeugOhneSaege_neu_combo['state'] = 'readonly'
|
||||
halbzeugOhneSaege_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_halbzeugOhneSaege_neu'))
|
||||
halbzeugOhneSaege_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.halbzeugOhneSaege_neu_combo = ttk.Combobox(frame, textvariable=self.halbzeugOhneSaege_neu)
|
||||
self.halbzeugOhneSaege_neu_combo['values'] = ['ja','nein']
|
||||
self.halbzeugOhneSaege_neu_combo['state'] = 'readonly'
|
||||
self.halbzeugOhneSaege_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_halbzeugOhneSaege_neu'))
|
||||
self.halbzeugOhneSaege_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Rüstcode
|
||||
@@ -456,11 +467,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
ruestcode_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.ruestcode_neu = tk.StringVar()
|
||||
ruestcode_neu_combo = ttk.Combobox(frame, textvariable=self.ruestcode_neu)
|
||||
ruestcode_neu_combo['values'] = ruestcodes
|
||||
ruestcode_neu_combo['state'] = 'readonly'
|
||||
ruestcode_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_ruestcode_neu'))
|
||||
ruestcode_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.ruestcode_neu_combo = ttk.Combobox(frame, textvariable=self.ruestcode_neu)
|
||||
self.ruestcode_neu_combo['values'] = ruestcodes
|
||||
self.ruestcode_neu_combo['state'] = 'readonly'
|
||||
self.ruestcode_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_ruestcode_neu'))
|
||||
self.ruestcode_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Fertigungsart
|
||||
@@ -471,11 +482,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
fertigungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.fertigungsart_neu = tk.StringVar()
|
||||
fertigungsart_neu_combo = ttk.Combobox(frame, textvariable=self.fertigungsart_neu)
|
||||
fertigungsart_neu_combo['values'] = categories
|
||||
fertigungsart_neu_combo['state'] = 'readonly'
|
||||
fertigungsart_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_fertigungsart_neu'))
|
||||
fertigungsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.fertigungsart_neu_combo = ttk.Combobox(frame, textvariable=self.fertigungsart_neu)
|
||||
self.fertigungsart_neu_combo['values'] = categories
|
||||
self.fertigungsart_neu_combo['state'] = 'readonly'
|
||||
self.fertigungsart_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_fertigungsart_neu'))
|
||||
self.fertigungsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Allgmeintoleranz
|
||||
@@ -486,11 +497,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
allgemeintoleranz_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.allgemeintoleranz_neu = tk.StringVar()
|
||||
allgemeintoleranz_neu_combo = ttk.Combobox(frame, textvariable=self.allgemeintoleranz_neu)
|
||||
allgemeintoleranz_neu_combo['values'] = categories
|
||||
allgemeintoleranz_neu_combo['state'] = 'readonly'
|
||||
allgemeintoleranz_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_allgemeintoleranz_neu'))
|
||||
allgemeintoleranz_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.allgemeintoleranz_neu_combo = ttk.Combobox(frame, textvariable=self.allgemeintoleranz_neu)
|
||||
self.allgemeintoleranz_neu_combo['values'] = categories
|
||||
self.allgemeintoleranz_neu_combo['state'] = 'readonly'
|
||||
self.allgemeintoleranz_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_allgemeintoleranz_neu'))
|
||||
self.allgemeintoleranz_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# FOS-Gruppe
|
||||
@@ -501,11 +512,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
fosGruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.fosGruppe_neu = tk.StringVar()
|
||||
fosGruppe_neu_combo = ttk.Combobox(frame, textvariable=self.fosGruppe_neu)
|
||||
fosGruppe_neu_combo['values'] = categories
|
||||
fosGruppe_neu_combo['state'] = 'readonly'
|
||||
fosGruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_fosGruppe_neu'))
|
||||
fosGruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.fosGruppe_neu_combo = ttk.Combobox(frame, textvariable=self.fosGruppe_neu)
|
||||
self.fosGruppe_neu_combo['values'] = categories
|
||||
self.fosGruppe_neu_combo['state'] = 'readonly'
|
||||
self.fosGruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_fosGruppe_neu'))
|
||||
self.fosGruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Kalulationsart
|
||||
@@ -516,11 +527,11 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
kalkulationsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.kalkulationsart_neu = tk.StringVar()
|
||||
kalkulationsart_neu_combo = ttk.Combobox(frame, textvariable=self.kalkulationsart_neu)
|
||||
kalkulationsart_neu_combo['values'] = categories
|
||||
kalkulationsart_neu_combo['state'] = 'readonly'
|
||||
kalkulationsart_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_kalkulationsart_neu'))
|
||||
kalkulationsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.kalkulationsart_neu_combo = ttk.Combobox(frame, textvariable=self.kalkulationsart_neu)
|
||||
self.kalkulationsart_neu_combo['values'] = categories
|
||||
self.kalkulationsart_neu_combo['state'] = 'readonly'
|
||||
self.kalkulationsart_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_kalkulationsart_neu'))
|
||||
self.kalkulationsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
@@ -541,6 +552,13 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
"fosGruppe_neu": self.fosGruppe_neu.get(),
|
||||
"kalkulationsart_sivas": self.kalkulationsart_sivas.get(),
|
||||
"kalkulationsart_neu": self.kalkulationsart_neu.get(),
|
||||
# ab hier die Dropdowns der Oberfläche auslesen
|
||||
"cb_halbzeugOhneSaege_neu" :self.halbzeugOhneSaege_neu_combo['values'],
|
||||
"cb_ruestcode_neu" :self.ruestcode_neu_combo['values'],
|
||||
"cb_fertigungsart_neu" :self.fertigungsart_neu_combo['values'],
|
||||
"cb_allgemeintoleranz_neu" :self.allgemeintoleranz_neu_combo['values'],
|
||||
"cb_fosGruppe_neu" :self.fosGruppe_neu_combo['values'],
|
||||
"cb_kalkulationsart_neu" :self.kalkulationsart_neu_combo['values']
|
||||
}
|
||||
|
||||
def data_from_model(self):
|
||||
@@ -570,6 +588,20 @@ class RightFrameHalbzeugOhneS(AllFrames):
|
||||
self.kalkulationsart_sivas.set(data["kalkulationsart_sivas"])
|
||||
if 'kalkulationsart_neu' in data:
|
||||
self.kalkulationsart_neu.set(data["kalkulationsart_neu"])
|
||||
# ab hier die Dropdowns der Oberfläche befüllen.
|
||||
if 'cb_halbzeugOhneSaege_neu' in data:
|
||||
self.halbzeugOhneSaege_neu_combo['values'] = data['cb_halbzeugOhneSaege_neu']
|
||||
if 'cb_ruestcode_neu' in data:
|
||||
self.ruestcode_neu_combo['values'] = data['cb_ruestcode_neu']
|
||||
if 'cb_fertigungsart_neu' in data:
|
||||
self.fertigungsart_neu_combo['values'] = data['cb_fertigungsart_neu']
|
||||
if 'cb_allgemeintoleranz_neu' in data:
|
||||
self.allgemeintoleranz_neu_combo['values'] = data['cb_allgemeintoleranz_neu']
|
||||
if 'cb_fosGruppe_neu' in data:
|
||||
self.fosGruppe_neu_combo['values'] = data['cb_fosGruppe_neu']
|
||||
if 'cb_kalkulationsart_neu' in data:
|
||||
self.kalkulationsart_neu_combo['values'] = data['cb_kalkulationsart_neu']
|
||||
|
||||
|
||||
|
||||
class RightFrameBeschaffungsart(AllFrames):
|
||||
@@ -583,7 +615,7 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
|
||||
# Beschaffungsart
|
||||
beschaffungsart_label = ttk.Label(frame, text="Beschaffungsart:" )
|
||||
@@ -593,11 +625,11 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
beschaffungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.beschaffungsart_neu = tk.StringVar()
|
||||
beschaffungsart_combo = ttk.Combobox(frame, textvariable=self.beschaffungsart_neu)
|
||||
beschaffungsart_combo['values'] = categories
|
||||
beschaffungsart_combo['state'] = 'readonly'
|
||||
beschaffungsart_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_beschaffungsart_neu'))
|
||||
beschaffungsart_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.beschaffungsart_combo = ttk.Combobox(frame, textvariable=self.beschaffungsart_neu)
|
||||
self.beschaffungsart_combo['values'] = categories
|
||||
self.beschaffungsart_combo['state'] = 'readonly'
|
||||
self.beschaffungsart_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_beschaffungsart_neu'))
|
||||
self.beschaffungsart_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Mengeneinheit
|
||||
@@ -608,11 +640,11 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
mengeneinheit_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.mengeneinheit_neu = tk.StringVar()
|
||||
mengeneinheit_combo = ttk.Combobox(frame, textvariable=self.mengeneinheit_neu)
|
||||
mengeneinheit_combo['values'] = categories
|
||||
mengeneinheit_combo['state'] = 'readonly'
|
||||
mengeneinheit_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_mengeneinheit_neu'))
|
||||
mengeneinheit_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.mengeneinheit_combo = ttk.Combobox(frame, textvariable=self.mengeneinheit_neu)
|
||||
self.mengeneinheit_combo['values'] = categories
|
||||
self.mengeneinheit_combo['state'] = 'readonly'
|
||||
self.mengeneinheit_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_mengeneinheit_neu'))
|
||||
self.mengeneinheit_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Halbzeug
|
||||
@@ -623,11 +655,11 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
halbzeug_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.halbzeug_neu = tk.StringVar()
|
||||
halbzeug_combo = ttk.Combobox(frame, textvariable=self.halbzeug_neu)
|
||||
halbzeug_combo['values'] = ['ja','nein']
|
||||
halbzeug_combo['state'] = 'readonly'
|
||||
halbzeug_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_halbzeug_neu'))
|
||||
halbzeug_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.halbzeug_combo = ttk.Combobox(frame, textvariable=self.halbzeug_neu)
|
||||
self.halbzeug_combo['values'] = ['ja','nein']
|
||||
self.halbzeug_combo['state'] = 'readonly'
|
||||
self.halbzeug_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_halbzeug_neu'))
|
||||
self.halbzeug_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
@@ -643,22 +675,33 @@ class RightFrameBeschaffungsart(AllFrames):
|
||||
"mengeneinheit_neu": self.mengeneinheit_neu.get(),
|
||||
"halbzeug_sivas": self.halbzeug_sivas.get(),
|
||||
"halbzeug_neu": self.halbzeug_neu.get(),
|
||||
# ab hier die Dropdowns der Oberfläche auslesen.
|
||||
"cb_beschaffungsart_neu": self.beschaffungsart_combo['values'],
|
||||
"cb_mengeneinheit_neu": self.mengeneinheit_combo['values'],
|
||||
"cb_halbzeug_neu": self.halbzeug_combo['values'],
|
||||
}
|
||||
|
||||
def data_from_model(self):
|
||||
data = self.get_controller().get_all_gui_data()
|
||||
if 'beschaffungsart_sivas' in data:
|
||||
if "beschaffungsart_sivas" in data:
|
||||
self.beschaffungsart_sivas.set(data["beschaffungsart_sivas"])
|
||||
if 'beschaffungsart_neu' in data:
|
||||
if "beschaffungsart_neu" in data:
|
||||
self.beschaffungsart_neu.set(data["beschaffungsart_neu"])
|
||||
if 'mengeneinheit_sivas' in data:
|
||||
if "mengeneinheit_sivas" in data:
|
||||
self.mengeneinheit_sivas.set(data["mengeneinheit_sivas"])
|
||||
if 'mengeneinheit_neu' in data:
|
||||
if "mengeneinheit_neu" in data:
|
||||
self.mengeneinheit_neu.set(data["mengeneinheit_neu"])
|
||||
if 'halbzeug_sivas' in data:
|
||||
if "halbzeug_sivas" in data:
|
||||
self.halbzeug_sivas.set(data["halbzeug_sivas"])
|
||||
if 'halbzeug_neu' in data:
|
||||
if "halbzeug_neu" in data:
|
||||
self.halbzeug_neu.set(data["halbzeug_neu"])
|
||||
# ab hier die Dropdowns der Oberfläche befüllen.
|
||||
if "cb_beschaffungsart_neu" in data:
|
||||
self.beschaffungsart_combo['values'] = data["cb_beschaffungsart_neu"]
|
||||
if "cb_mengeneinheit_neu" in data:
|
||||
self.mengeneinheit_combo['values'] = data["cb_mengeneinheit_neu"]
|
||||
if "cb_halbzeug_neu" in data:
|
||||
self.halbzeug_combo['values'] = data["cb_halbzeug_neu"]
|
||||
|
||||
class RightFrameTOSGruppe(AllFrames):
|
||||
def __init__(self, frame, nrow=0, configs=None):
|
||||
@@ -671,7 +714,7 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
|
||||
# TOS-Gruppe
|
||||
tosgruppe_label = ttk.Label(frame, text="TOS-Gruppe:" )
|
||||
@@ -692,11 +735,11 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
dispogruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.dispogruppe_neu = tk.StringVar()
|
||||
dispogruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispogruppe_neu)
|
||||
dispogruppe_neu_combo['values'] = categories
|
||||
dispogruppe_neu_combo['state'] = 'readonly'
|
||||
dispogruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_dispogruppe_neu'))
|
||||
dispogruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.dispogruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispogruppe_neu)
|
||||
self.dispogruppe_neu_combo['values'] = categories
|
||||
self.dispogruppe_neu_combo['state'] = 'readonly'
|
||||
self.dispogruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_dispogruppe_neu'))
|
||||
self.dispogruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Dispolaufgruppe
|
||||
@@ -707,11 +750,11 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
dispolaufgruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.dispolaufgruppe_neu = tk.StringVar()
|
||||
dispolaufgruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispolaufgruppe_neu)
|
||||
dispolaufgruppe_neu_combo['values'] = categories
|
||||
dispolaufgruppe_neu_combo['state'] = 'readonly'
|
||||
dispolaufgruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_dispolaufgruppe_neu'))
|
||||
dispolaufgruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.dispolaufgruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispolaufgruppe_neu)
|
||||
self.dispolaufgruppe_neu_combo['values'] = categories
|
||||
self.dispolaufgruppe_neu_combo['state'] = 'readonly'
|
||||
self.dispolaufgruppe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_dispolaufgruppe_neu'))
|
||||
self.dispolaufgruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Ersatz für
|
||||
@@ -745,11 +788,11 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
hersteller_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.hersteller_neu = tk.StringVar()
|
||||
hersteller_neu_combo = ttk.Combobox(frame, textvariable=self.hersteller_neu)
|
||||
hersteller_neu_combo['values'] = categories
|
||||
hersteller_neu_combo['state'] = 'readonly'
|
||||
hersteller_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_hersteller_neu'))
|
||||
hersteller_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.hersteller_neu_combo = ttk.Combobox(frame, textvariable=self.hersteller_neu)
|
||||
self.hersteller_neu_combo['values'] = categories
|
||||
self.hersteller_neu_combo['state'] = 'readonly'
|
||||
self.hersteller_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_hersteller_neu'))
|
||||
self.hersteller_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Hersteller Teilenummer
|
||||
@@ -785,6 +828,10 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
"ersetztdurch_sivas": self.ersetztdurch_sivas.get(),
|
||||
"herstteilenr_sivas": self.herstteilenr_sivas.get(),
|
||||
"herstteilenr_neu": self.herstteilenr_neu.get(),
|
||||
# ab hier die Dropdowns der Oberfläche auslesen.
|
||||
"cb_dispogruppe_neu": self.dispogruppe_neu_combo['values'],
|
||||
"cb_dispolaufgruppe_neu": self.dispolaufgruppe_neu_combo['values'],
|
||||
"cb_hersteller_neu": self.hersteller_neu_combo['values'],
|
||||
}
|
||||
|
||||
def data_from_model(self):
|
||||
@@ -817,6 +864,13 @@ class RightFrameTOSGruppe(AllFrames):
|
||||
self.herstteilenr_sivas.set(data["herstteilenr_sivas"])
|
||||
if 'herstteilenr_neu' in data:
|
||||
self.herstteilenr_neu.set(data["herstteilenr_neu"])
|
||||
# ab hier die Dropdowns der Oberfläche befüllen.
|
||||
if "cb_dispogruppe_neu" in data:
|
||||
self.dispogruppe_neu_combo['values'] = data["cb_dispogruppe_neu"]
|
||||
if "cb_dispolaufgruppe_neu" in data:
|
||||
self.dispolaufgruppe_neu_combo['values'] = data["cb_dispolaufgruppe_neu"]
|
||||
if "cb_hersteller_neu" in data:
|
||||
self.hersteller_neu_combo['values'] = data["cb_hersteller_neu"]
|
||||
|
||||
class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
def __init__(self, frame, nrow=0, configs=None):
|
||||
@@ -829,7 +883,7 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
wnamen = configs.Werkstoffe.get_werkstoff_namen()
|
||||
|
||||
# Werkstoffdiskrepanz
|
||||
@@ -837,7 +891,7 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
werkstoffdiskr_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.werkstoffdiskrepanz= None
|
||||
werkstoffdiskr_checkbutton = ttk.Checkbutton(frame,
|
||||
werkstoffdiskr_checkbutton = ttk.Checkbutton(frame,
|
||||
#text='ja',
|
||||
variable=self.werkstoffdiskrepanz,
|
||||
command=lambda: self.callback("cb_werkstoffdiskrepanz"),
|
||||
@@ -850,11 +904,11 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
werkstofftyp_label = ttk.Label(frame, text="Werkstofftyp:" )
|
||||
werkstofftyp_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.werkstofftyp_neu = tk.StringVar()
|
||||
werkstofftyp_neu_combo = ttk.Combobox(frame, textvariable=self.werkstofftyp_neu)
|
||||
werkstofftyp_neu_combo['values'] = wnamen
|
||||
werkstofftyp_neu_combo['state'] = 'readonly'
|
||||
werkstofftyp_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_werkstofftyp_neu'))
|
||||
werkstofftyp_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.werkstofftyp_neu_combo = ttk.Combobox(frame, textvariable=self.werkstofftyp_neu)
|
||||
self.werkstofftyp_neu_combo['values'] = wnamen
|
||||
self.werkstofftyp_neu_combo['state'] = 'readonly'
|
||||
self.werkstofftyp_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_werkstofftyp_neu'))
|
||||
self.werkstofftyp_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Material
|
||||
@@ -865,11 +919,11 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
material_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.material_neu = tk.StringVar()
|
||||
material_neu_combo = ttk.Combobox(frame, textvariable=self.material_neu)
|
||||
material_neu_combo['values'] = categories
|
||||
material_neu_combo['state'] = 'readonly'
|
||||
material_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_material_neu'))
|
||||
material_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.material_neu_combo = ttk.Combobox(frame, textvariable=self.material_neu)
|
||||
self.material_neu_combo['values'] = categories
|
||||
self.material_neu_combo['state'] = 'readonly'
|
||||
self.material_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_material_neu'))
|
||||
self.material_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
|
||||
@@ -878,11 +932,11 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
oberflaeche_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.oberflaeche_neu = tk.StringVar()
|
||||
oberflaeche_neu_combo = ttk.Combobox(frame, textvariable=self.oberflaeche_neu)
|
||||
oberflaeche_neu_combo['values'] = categories
|
||||
oberflaeche_neu_combo['state'] = 'readonly'
|
||||
oberflaeche_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_oberflaeche_neu'))
|
||||
oberflaeche_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.oberflaeche_neu_combo = ttk.Combobox(frame, textvariable=self.oberflaeche_neu)
|
||||
self.oberflaeche_neu_combo['values'] = categories
|
||||
self.oberflaeche_neu_combo['state'] = 'readonly'
|
||||
self.oberflaeche_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_oberflaeche_neu'))
|
||||
self.oberflaeche_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
# Farbe
|
||||
@@ -890,11 +944,11 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
farbe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
self.farbe_neu = tk.StringVar()
|
||||
farbe_neu_combo = ttk.Combobox(frame, textvariable=self.farbe_neu)
|
||||
farbe_neu_combo['values'] = categories
|
||||
farbe_neu_combo['state'] = 'readonly'
|
||||
farbe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_farbe_neu'))
|
||||
farbe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.farbe_neu_combo = ttk.Combobox(frame, textvariable=self.farbe_neu)
|
||||
self.farbe_neu_combo['values'] = categories
|
||||
self.farbe_neu_combo['state'] = 'readonly'
|
||||
self.farbe_neu_combo.bind('<<ComboboxSelected>>', lambda event:self.callback('cb_farbe_neu'))
|
||||
self.farbe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
@@ -910,6 +964,11 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
"material_neu": self.material_neu.get(),
|
||||
"oberflaeche_neu": self.oberflaeche_neu.get(),
|
||||
"farbe_neu": self.farbe_neu.get(),
|
||||
# ab hier die Dropdowns der Oberfläche
|
||||
"cb_werkstofftyp_neu": self.werkstofftyp_neu_combo['values'],
|
||||
"cb_material_neu": self.material_neu_combo['values'],
|
||||
"cb_oberflaeche_neu": self.oberflaeche_neu_combo['values'],
|
||||
"cb_farbe_neu": self.farbe_neu_combo['values'],
|
||||
}
|
||||
|
||||
def data_from_model(self):
|
||||
@@ -928,6 +987,15 @@ class RightFrameWerkstoffdiskrepanz(AllFrames):
|
||||
self.oberflaeche_neu.set(data["oberflaeche_neu"])
|
||||
if 'farbe_neu' in data:
|
||||
self.farbe_neu.set(data["farbe_neu"])
|
||||
# ab hier die Dropdowns der Oberfläche befüllen.
|
||||
if 'cb_werkstofftyp_neu' in data:
|
||||
self.werkstofftyp_neu_combo['values'] = data["cb_werkstofftyp_neu"]
|
||||
if 'cb_material_neu' in data:
|
||||
self.material_neu_combo['values'] = data["cb_material_neu"]
|
||||
if 'cb_oberflaeche_neu' in data:
|
||||
self.oberflaeche_neu_combo['values'] = data["cb_oberflaeche_neu"]
|
||||
if 'cb_farbe_neu' in data:
|
||||
self.farbe_neu_combo['values'] = data["cb_farbe_neu"]
|
||||
|
||||
|
||||
class RightFrameVersion(AllFrames):
|
||||
@@ -941,7 +1009,7 @@ class RightFrameVersion(AllFrames):
|
||||
self.rownum = AllFrames.get_rows(self)
|
||||
col_left = 0
|
||||
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
categories = configs.Allgemein.get_options("Kategorien")
|
||||
|
||||
# Version
|
||||
version_label = ttk.Label(frame, text="Version:" )
|
||||
@@ -991,7 +1059,7 @@ class RightFrameVersion(AllFrames):
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
|
||||
|
||||
def get_data(self):
|
||||
return {
|
||||
@@ -1054,7 +1122,7 @@ class RightFrameZusatzinfos(AllFrames):
|
||||
separator = ttk.Separator(frame, orient='horizontal')
|
||||
separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
|
||||
speichern_button = ttk.Button(frame, text="Speichern", command=lambda: self.callback("cb_speichern"))
|
||||
speichern_button.grid(column=col_left, row=self.rownum, sticky=tk.EW, padx=3, pady=3)
|
||||
migrieren_button = ttk.Button(frame, text="migrieren", command=lambda: self.callback("cb_migrieren"))
|
||||
@@ -1071,14 +1139,14 @@ class RightFrameZusatzinfos(AllFrames):
|
||||
def data_from_model(self):
|
||||
data = self.get_controller().get_all_gui_data()
|
||||
if 'zusatzinfos_auto_text' in data:
|
||||
self.zusatzinfos_auto_text.set(data["zusatzinfos_auto_text"])
|
||||
self.zusatzinfos_auto_text.set(data["zusatzinfos_auto_text"])
|
||||
if 'zusatzinfos_bendef_text' in data:
|
||||
self.zusatzinfos_bendef_text.set(data["zusatzinfos_bendef_text"])
|
||||
self.zusatzinfos_bendef_text.set(data["zusatzinfos_bendef_text"])
|
||||
|
||||
class App():
|
||||
def __init__(self, root, configs=None):
|
||||
"""Standardgui mit Baum zur Anwahl der Teile des Assemblies"""
|
||||
|
||||
|
||||
self.root = root
|
||||
self.build_widgets(root, configs)
|
||||
|
||||
@@ -1193,7 +1261,7 @@ class App():
|
||||
|
||||
def OnMouseWheel(self,event):
|
||||
self.canvas.yview("scroll", event.delta, "units")
|
||||
return "break"
|
||||
return "break"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -1206,9 +1274,9 @@ if __name__ == "__main__":
|
||||
data model objects. The CONTROLLER receives the input, optionally validates
|
||||
it and then passes the input to the model.
|
||||
|
||||
<CONTROLLER>
|
||||
<CONTROLLER>
|
||||
<--fills gui -- --manipulates-->
|
||||
--user input-> <--give model data--
|
||||
<VIEW> <MODEL>
|
||||
|
||||
<VIEW> <MODEL>
|
||||
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user