diff --git a/main.py b/main.py new file mode 100644 index 0000000..838f73b --- /dev/null +++ b/main.py @@ -0,0 +1,530 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import registry +from sqlalchemy import create_engine +from sqlalchemy.sql.expression import and_ +from datetime import date + +from models import * + +from tkinter import * +from functools import partial +from tkinter import messagebox, ttk + + +mapper_registry = registry() +engine = create_engine('sqlite:///dipl.db', echo=True) +Base = mapper_registry.generate_base() +Session = sessionmaker(bind=engine) + + +def main(): + + window = Tk() + window.geometry("400x400") + window.title("Вход в аккаунт") + window.config(bg="#5D6D7E") + + lbl1=Label(window,text="Добро пожаловать",font=("",25),fg="#fed9b7",bg="#5D6D7E") + lbl1.pack(anchor="center") + + lbl2=Label(window,text="Логин:",font=("",20),fg="#fdfcdc",bg="#5D6D7E") + lbl2.place(x=10,y=90) + + ent1=Entry(window) + ent1.place(x=200,y=100) + + lbl3=Label(window,text="Пароль:",font=("",20),fg="#fdfcdc",bg="#5D6D7E") + lbl3.place(x=10,y=170) + + ent3=Entry(window) + ent3.place(x=200,y=180) + + btn1=Button(window,text="Принять", command=lambda: validateLogin(ent1.get(), ent3.get())) + btn1.place(x=250,y=300) + + btn2=Button(window,text="Настройки",command=options) + btn2.place(x=70,y=300) + + window.mainloop() + +def options(): + window = Tk() + window.geometry("400x400") + window.title("Настройки") + window.config(bg="#5D6D7E") + + lbl1=Label(window,text="Выбирите таблицу",font=("",25),fg="#fed9b7",bg="#5D6D7E") + lbl1.pack(anchor="center") + + bo1=Button(window,text="1. Добавить должность",command=addDolgnostGui) + bo1.place(x=50,y=100) + + bo2=Button(window,text="2. Добавить пользователя",command=addUserGui) + bo2.place(x=200,y=100) + + bo3=Button(window,text="3. Добавить принтер",command=addPrinterGui) + bo3.place(x=50,y=200) + + bo4=Button(window,text="4. Добавить пластик",command=addPlasticGui) + bo4.place(x=200,y=200) + + window.mainloop() + + +def validateLogin(username, password): + sess = Session() + users = sess.query(Users).filter(Users.login==username, Users.passwd==password) + results = users.first() + if hasattr(results,"login"): + + messagebox.showinfo(title="Успех", message="Вы успешно авторизировались в ситеме.") + else: + messagebox.showinfo(title="Успех", message="Вы НЕ авторизировались в ситеме.") + return + +def addUserGui(): + window = Tk() + window.geometry("300x500") + window.config(bg="#5D6D7E") + + l1 = Label(window, text="ФИО") + l1.place(x=50,y=100) + + fio = Entry(window) + fio.place(x=150,y=100) + + l2 = Label(window, text="Должность") + l2.place(x=50,y=150) + + + dlg = getDolgnost() + dlg_var = StringVar(value=dlg[0]) + + dolgnost = ttk.Combobox(window,textvariable=dlg_var, values=dlg) + dolgnost.place(x=150,y=150) + + + l3 = Label(window, text="Логин") + l3.place(x=50,y=250) + + login = Entry(window) + login.place(x=150,y=250) + + + l4 = Label(window, text="Пароль") + l4.place(x=50,y=300) + + passwd = Entry(window) + passwd.place(x=150,y=300) + + print(dolgnost.get()) + button_add = Button(window, text="Добавить", command=lambda: addUser(fio.get(), + dolgnost.get(), + login.get(), + passwd.get())) + button_add.place(x=100,y=350) + + def addUser(fio, dolgnost, login, passwd): + sess = Session() + dlg = sess.query(Dolgnost).filter(Dolgnost.dolgnst==dolgnost).first() + newuser = Users(fio=fio, id_dolgnost=dlg.id, login=login, passwd=passwd) + sess.add(newuser) + sess.commit() + sess.close() + + window.mainloop() + + +def addPrinterGui(): + + window = Tk() + window.geometry("300x300") + window.config(bg="#5D6D7E") + + lp1 = Label(window, text="Название") + lp1.place(x=15,y=20) + + nazvaniee = Entry(window) + nazvaniee.place(x=160,y=20) + + + lp2 = Label(window, text="Макс Скорость Печати") + lp2.place(x=15,y=70) + + maxSpedPrint = Entry(window) + maxSpedPrint.place(x=160,y=70) + + lp3 = Label(window, text="Мин Скорость Печати") + lp3.place(x=15,y=120) + + minSpedPrint = Entry(window) + minSpedPrint.place(x=160,y=120) + + bapg=Button(window,text="Добавить",command=lambda:addPrinter(nazvaniee.get(), + maxSpedPrint.get(), + minSpedPrint.get())) + bapg.place(x=220,y=170) + + def addPrinter(nazvanie, maxsped,minspeed): + sess = Session() + new = Printer(nazvanie=nazvanie, maxSpedPrint=maxsped, minSpedPrint=minspeed) + sess.add(new) + sess.commit() + sess.close() + minSpedPrint.delete(0, END) + maxSpedPrint.delete(0, END) + nazvaniee.delete(0, END) + window.mainloop() + + +def addPlasticGui(): + window = Tk() + window.geometry("380x350") + window.config(bg="#5D6D7E") + + lpl1 = Label(window, text="Название") + lpl1.place(x=15,y=20) + + nazvanie = Entry(window) + nazvanie.place(x=170,y=20) + + lpl2 = Label(window, text="Диаметр") + lpl2.place(x=15,y=70) + + diametr = Entry(window) + diametr.place(x=170,y=70) + + lpl3 = Label(window, text="Мин Температура Печати") + lpl3.place(x=15,y=120) + + mintempprint = Entry(window) + mintempprint.place(x=170,y=120) + + lpl4 = Label(window, text="Макс Температура Печати") + lpl4.place(x=15,y=170) + + maxtemprint = Entry(window) + maxtemprint.place(x=170,y=170) + + lpl5 = Label(window, text="Дата Производства") + lpl5.place(x=15,y=230) + + days = list(range(1, 32)) + + months = list(range(1, 13)) + + years = list(range(1940, 2026)) + + # Create ComboBox for days + day_combobox = ttk.Combobox(window,values=days,width=2) + day_combobox.place(x=140,y=230) + + # Create ComboBox for months + month_combobox = ttk.Combobox(window,values=months,width=2) + month_combobox.place(x=185,y=230) + + # Create ComboBox for years + year_combobox = ttk.Combobox(window,values=years,width=4) + year_combobox.place(x=225,y=230) + def convert_to_date(): + # Retrieve selected values from the ComboBoxes + selected_day = int(day_combobox.get()) + selected_month = int(month_combobox.get()) + selected_year = int(year_combobox.get()) + + # Convert the selected values to a date object + date_obj = date(selected_year, selected_month, selected_day) + return date_obj + + bapg=Button(window,text="Добавить",command=lambda:addPlastic(nazvanie.get(), + diametr.get(), + mintempprint.get(), + maxtemprint.get(), + convert_to_date())) + bapg.place(x=230,y=280) + + def addPlastic(nazvanie, diametr, mintempprint, maxtempprint, dateproizv): + sess = Session() + new = Plastic(nazvanie=nazvanie, + diametr=diametr, + minTempPrint=mintempprint, + maxTempPrint=maxtempprint, dateproizv=dateproizv) + sess.add(new) + sess.commit() + sess.close() + + window.mainloop + + + +def addDolgnostGui(): + window = Tk() + window.geometry("300x120") + window.config(bg="#5D6D7E") + + l1 = Label(window,bg="#5D6D7E",text="Должность") + l1.grid(row=1, column=0) + + dolg = Entry(window) + dolg.grid(row=1, column=1) + + button_add = Button(window, text="Добавить", command=lambda: addDolgnost(dolg.get())) + button_add.grid(row=5, column=2) + + def addDolgnost(dolgnost): + sess = Session() + new = Dolgnost(dolgnst = dolgnost) + sess.add(new) + sess.commit() + sess.close() + + window.mainloop() + + + + +def addPrintSettingsGui(): + window = Tk() + window.geometry("800x600") + + prntc = getPinters() + prnt_var = StringVar(value = prntc[0]) + + plstc = getPlastics() + plst_var = StringVar(value=plstc[0]) + + l1 = Label(window,bg="#5D6D7E",text="Выберите принтер") + l1.place(x=10, y=30) + + prnt = ttk.Combobox(window,textvariable=prnt_var, values=prntc) + prnt.place(x=210,y=20) + + l2 = Label(window,bg="#5D6D7E",text="Выберите пластик") + l2.place(x=10, y=80) + + plst = ttk.Combobox(window,textvariable=plst_var, values=plstc) + plst.place(x=210,y=80) + + l3 = Label(window,bg="#5D6D7E",text="Введите температуру сопла") + l3.place(x=10, y=120) + tempsopla = Entry(window) + tempsopla.place(x=210, y=120) + + l4 = Label(window,bg="#5D6D7E",text="Введите температуру стола") + l4.place(x=10, y=200) + tempstola = Entry(window) + tempstola.place(x=210, y=200) + + l5 = Label(window,bg="#5D6D7E",text="Введите процент заполнения") + l5.place(x=10, y=250) + procentZapoln= Entry(window) + procentZapoln.place(x=210, y=250) + + l6 = Label(window,bg="#5D6D7E",text="Введите скорость печати") + l6.place(x=10, y=250) + printSpeed= Entry(window) + printSpeed.place(x=210, y=300) + + goodset = IntVar() + + chk = Checkbutton(window, text='Оптимальные настройки', variable=goodset) + chk.place(x=10, y=350) + + l6 = Label(window,bg="#5D6D7E",text="Примечание") + l6.place(x=10, y=400) + primech= Entry(window) + primech.place(x=210, y=400) + + button_add = Button(window, text="Добавить", command=lambda: addPrintSettings(prnt.get(), + plst.get(), + tempsopla.get(), + tempstola.get(), + procentZapoln.get(), + goodset.get(), + printSpeed.get(), + primech.get())) + button_add.place(x=100, y=400) + + def addPrintSettings(prnt, + plst, + tempstola, + tempsopla, + procentzapoln, + goodset, + printspeed, + primech): + sess = Session() + + printer = sess.query(Printer).filter(Printer.nazvanie==prnt).first() + plast = sess.query(Plastic).filter(Plastic.nazvanie==plst).first() + + gs=False + + if goodset == 0: + gs=False + else: + gs=True + + import time + addtime=time.localtime() + + new = PrintSettings(tempStol=tempstola, + tempSopl=tempsopla, + procentZapoln=procentzapoln, + PrintSpeed=printspeed, + good_set=gs, + #time_add=addtime, + primechanie=primech, + id_printer=printer.id, + id_plastic=plast.id, + ) + sess.add(new) + sess.commit() + sess.close() + + + + + + + + + + + """ + + dataFrame = Frame(window) + dataFrame.pack() + + table_pre_data = {'tempstol':'Темп. стола', 'tempsopl':'Темп. сопла'} + table_columns = [] + table_headers = [] + + for key, value in table_pre_data.items(): + table_columns.append(key) + table_headers.append(value) + + + prDataFrame = ttk.Treeview(dataFrame) + prDataFrame['columns'] = table_columns + + for col in table_columns: + prDataFrame.column(col, width=100) + + for col in table_headers: + prDataFrame.heading(col,text=value) + + + #bapg=Button(window,text="Добавить",command=lambda:getPrintSetings()) + """ + + + + window.mainloop() + + + +def getPrintSettings(): + sess = Session() + + + print() + print("query") + print() + + """ + + psettings = (sess.query(PrintSettings, Printer, Plastic) + .join(Printer, PrintSettings.id_printer==Printer.id) + .filter(Printer.id==1) + .join(Plastic, PrintSettings.id_plastic==Plastic.id) + .filter(Plastic.nazvanie=="fdplast") + .all() + + ) + """ + + psettings= ( sess.query(PrintSettings).join(Printer).join(Plastic) + .filter((Printer.nazvanie=="ender3" and Plastic.nazvanie=="fdplast" + + ) + ).all() + + + ) + + + + print(psettings) + + for qwe in psettings: + print(qwe.id_plastic) + + plst_naz = sess.query(Plastic).filter(Plastic.id==psettings[0].id_plastic).first() + + print() + + print(plst_naz.nazvanie) + + + + print() + #print(psettings[0][1].nazvanie) + + print() + sess.close() + +def getUsers(): + sess= Session() + users = sess.query(Users).join(Dolgnost).all() + + for user in users: + dolg = sess.query(Dolgnost).filter(Dolgnost.id==user.id_dolgnost).first() + print(user.fio) + print(dolg.dolgnst) + + + +def getDolgnost(): + sess = Session() + dlggs = sess.query(Dolgnost).all() + print(dlggs) + + dlg_list = [] + + for dlg in dlggs: + dlg_list.append(dlg.dolgnst) + + sess.close() + return dlg_list + + +def getPinters(): + sess = Session() + printers = sess.query(Printer).all() + prnt = [] + + for printer in printers: + prnt.append(printer.nazvanie) + + sess.close() + return prnt + +def getPlastics(): + sess = Session() + plastics = sess.query(Plastic).all() + plst = [] + + for plastic in plastics: + plst.append(plastic.nazvanie) + sess.close() + + return plst + + + + + +if __name__ == '__main__': + getUsers() \ No newline at end of file diff --git a/models.py b/models.py new file mode 100644 index 0000000..2f5e780 --- /dev/null +++ b/models.py @@ -0,0 +1,86 @@ +from sqlalchemy import Column, Integer, String, create_engine, ForeignKey, DateTime, Boolean +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker, aliased, Query, relationship +from sqlalchemy.sql import func +from sqlalchemy.orm import registry +from sqlalchemy import create_engine + + +mapper_registry = registry() +engine = create_engine('sqlite:///dipl.db', echo=True) +Base = mapper_registry.generate_base() +Session = sessionmaker(bind=engine) + + +class Printer(Base): + __tablename__ = "Printer" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + maxSpedPrint = Column(Integer) + minSpedPrint = Column(Integer) + + print_settings = relationship("PrintSettings", backref="Printer") + + +class Plastic(Base): + __tablename__ = "Plastic" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + diametr = Column(Integer) + minTempPrint = Column(Integer) + maxTempPrint = Column(Integer) + dateproizv = Column(DateTime) + + print_settings = relationship("PrintSettings", backref="Plastic") + + +class PrintSettings(Base): + __tablename__ = "PrintSettings" + id = Column(Integer, primary_key=True) + tempStol = Column(Integer) + tempSopl = Column(Integer) + PrintSpeed = Column(Integer) + procentZapoln = Column(Integer) + good_set = Column(Boolean, unique=False, default=False) + time_add = Column(DateTime) + primechanie = Column(String) + + id_printer = Column(Integer, ForeignKey(Printer.id)) + id_plastic = Column(Integer, ForeignKey(Plastic.id)) + + +class Dolgnost(Base): + __tablename__ = "Dolgnost" + id = Column(Integer, primary_key=True) + dolgnst = Column(String) + + users = relationship("Users") + + +class Users(Base): + __tablename__ = "Users" + id = Column(Integer, primary_key=True) + fio = Column(String) + + login = Column(String) + passwd = Column(String) + isadmin = Column(Boolean, default=False) + + id_dolgnost = Column(Integer, ForeignKey(Dolgnost.id)) + + +def create_db(): + Base.metadata.create_all(engine) + + +def create_admin(): + sess = Session() + newuser = Users(fio="admin", dolgnost="admin", + login="admin", passwd="123456") + sess.add(newuser) + sess.commit() + sess.close() + + +if __name__ == '__main__': + create_db()