diff --git a/backup/main.py b/backup/main.py new file mode 100644 index 0000000..8d1a1bf --- /dev/null +++ b/backup/main.py @@ -0,0 +1,692 @@ +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() + dolg.delete(0, END) + + 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() + + #minSpedPrint.delete(0, END) + + + + + + + + + + + """ + + 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() + usr=[] + for user in users: + a = [] + dolg = sess.query(Dolgnost).filter(Dolgnost.id==user.id_dolgnost).first() + a.append(user.fio) + a.append(dolg.dolgnst) + a.append(user.isadmin) + + usr.append(a) + return usr + +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 + +def showAllUsersGui(): + window = Tk() + window.geometry("800x600") + window.iconbitmap(default="3d-printer.ico") + window.title("Все пользователи системы") + + lbl1=Label(window,text="Все пользователи системы",font=("",25),fg="#fed9b7",bg="#5D6D7E") + lbl1.pack(anchor="center") + + users = getUsers() + + tree = ttk.Treeview(window, column=("fio", "Dolgnost", "isadmin"), show='headings', height=5) + tree.column("# 1", anchor=CENTER) + tree.heading("# 1", text="ФИО") + tree.column("# 2", anchor=CENTER) + tree.heading("# 2", text="Должность") + tree.column("# 3", anchor=CENTER) + tree.heading("# 3", text="Администратор") + + for user in users: + if user[2]==False: + tree.insert('', 'end', text="1", values=(user[0], user[1], "Нет")) + else: + tree.insert('', 'end', text="1", values=(user[0], user[1], "Да")) + + + # + + tree.pack() + + + + + mainloop() + +def editUsers(): + + + root = Tk() + columns = ("Items", "Values") + Treeview = ttk.Treeview(root, height=18, show="headings", columns=columns) # + + Treeview.column("Items", width=200, anchor='center') + Treeview.column("Values", width=200, anchor='center') + + Treeview.heading("Items", text="Items") + Treeview.heading("Values", text="Values") + + Treeview.pack(side=LEFT, fill=BOTH) + + name = ['Item1', 'Item2', 'Item3'] + ipcode = ['10', '25', '163'] + for i in range(min(len(name), len(ipcode))): + Treeview.insert('', i, values=(name[i], ipcode[i])) + + + def treeview_sort_column(tv, col, reverse): + l = [(tv.set(k, col), k) for k in tv.get_children('')] + l.sort(reverse=reverse) + for index, (val, k) in enumerate(l): + tv.move(k, '', index) + tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse)) + + + def set_cell_value(event): + for item in Treeview.selection(): + item_text = Treeview.item(item, "values") + column = Treeview.identify_column(event.x) + row = Treeview.identify_row(event.y) + cn = int(str(column).replace('#', '')) + rn = int(str(row).replace('I', '')) + entryedit = Text(root, width=10 + (cn - 1) * 16, height=1) + entryedit.place(x=16 + (cn - 1) * 130, y=6 + rn * 20) + + def saveedit(): + Treeview.set(item, column=column, value=entryedit.get(0.0, "end")) + entryedit.destroy() + okb.destroy() + + okb = ttk.Button(root, text='OK', width=4, command=saveedit) + okb.place(x=90 + (cn - 1) * 242, y=2 + rn * 20) + + + def newrow(): + name.append('to be named') + ipcode.append('value') + Treeview.insert('', len(name) - 1, values=(name[len(name) - 1], ipcode[len(name) - 1])) + Treeview.update() + newb.place(x=120, y=(len(name) - 1) * 20 + 45) + newb.update() + + + Treeview.bind('', set_cell_value) + newb = ttk.Button(root, text='new item', width=20, command=newrow) + newb.place(x=120, y=(len(name) - 1) * 20 + 45) + + for col in columns: + Treeview.heading(col, text=col, command=lambda _col=col: treeview_sort_column(Treeview, _col, False)) + + + root.mainloop() + +def ShowOptimalSettingsGui(): + root = Tk() + root.title(" ") + root.geometry("700x500") + root.config(bg="#5D6D7E") + + l2 = Label(root,bg="#5D6D7E",text="Выберите принтер") + l2.place(x=10, y=20) + prnt = ttk.Combobox(root,textvariable="123", values=['Ender3', 'Kossel Delta']) + prnt.place(x=150, y=20) + + l2 = Label(root,bg="#5D6D7E",text="Выберите произв") + l2.place(x=10, y=60) + prnt2 = ttk.Combobox(root,textvariable="1123", values=['Fdplast', 'Filamentarno']) + prnt2.place(x=150, y=60) + + l3 = Label(root,bg="#5D6D7E",text="Выберите Тип пластика") + l3.place(x=10, y=100) + prnt3 = ttk.Combobox(root,textvariable="11234", values=['pla', 'petg', 'abs']) + prnt3.place(x=150, y=100) + + l2 = Label(root,bg="#5D6D7E",text="Выберите цвет") + l2.place(x=10, y=140) + prnt4 = ttk.Combobox(root,textvariable="1", values=['Голубой', 'Зелёгый']) + prnt4.place(x=150, y=140) + + + + + + chc=ttk.Checkbutton(root,text="Выбрать оптимальные?") + chc.place(x=100, y=170) + + + # определяем данные для отображения + people = [(209, 58, "57мм/cек", " "), (223, 75, "45мм/cек", "Проба прочности"), (211, 55, "57мм/cек", "Хорошая поверхность")] + people2 = [(211, 59, "62мм/cек")] + # определяем столбцы + columns = ("tempSopl", "tempStol", "Speed", "addit") + + tree = ttk.Treeview(columns=columns, show="headings") + tree.place( x=10, y=220) + + button_add = Button(root, text="Показать") + button_add.place(x=10, y=170) + + + + # определяем заголовки с выпавниваем по левому краю + tree.heading("tempSopl", text="Температура сопла", anchor=W) + tree.heading("tempStol", text="Температура стола", anchor=W) + tree.heading("Speed", text="Скорость печати", anchor=W) + tree.heading("addit", text="Примечание", anchor=W) + + # настраиваем столбцы + tree.column("#1", stretch=NO, width=200) + tree.column("#2", stretch=NO, width=200) + tree.column("#3", stretch=NO, width=200) + tree.column("#4", stretch=NO, width=200) + + # добавляем данные + for person in people: + tree.insert("", END, values=person) + + root.mainloop() + + +if __name__ == '__main__': + ShowOptimalSettingsGui() + + \ No newline at end of file diff --git a/backup/models.py b/backup/models.py new file mode 100644 index 0000000..8102f8c --- /dev/null +++ b/backup/models.py @@ -0,0 +1,121 @@ +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 Proshivka(Base): + __tablename__ = "Proshivka" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + versia = Column(String) + officialSite = Column(String) + + printers = relationship('Motherboard', backref='Proshivka') + + +class Mottherboard(Base): + __tablename__ = "Motherboard" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + versia = Column(String) + officialSite = Column(String) + kolvoDraivers = Column(String) + + drivers = relationship('Driver', backref='Motherboard') + proshivkas = Column(Integer, ForeignKey(Proshivka.id)) + printers = relationship('Printer', backref='Motherboard') + + +class Printer(Base): + __tablename__ = "Printer" + id = Column(Integer, primary_key=True) + kinematics = Column(String) + nazvanie = Column(String) + proshivka = Column(String) + maxSpedPrint = Column(Integer) + minSpedPrint = Column(Integer) + + print_settings = relationship("PrintSettings", backref="Printer") + mtboards = Column(Integer, ForeignKey(Mottherboard.id)) + + +class Driver(): + __tablename__ = "Driver" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + versia = Column(String) + rabTok = Column(Integer) + motherId = Column(Integer, ForeignKey(Mottherboard.id)) + + +class Plastic(Base): + __tablename__ = "Plastic" + id = Column(Integer, primary_key=True) + nazvanie = Column(String) + diametr = Column(Integer) + color = Column(String) + typePlast = Column(String) + proizv = Column(String) + 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) + isadmin = Column(Boolean, default=False) + users = relationship("Users") + + +class Users(Base): + __tablename__ = "Users" + id = Column(Integer, primary_key=True) + fio = Column(String) + + login = Column(String) + passwd = Column(String) + + id_dolgnost = Column(Integer, ForeignKey(Dolgnost.id)) + + +def create_db(): + Base.metadata.create_all(engine) + """ + sess = Session() + newuser = Users(fio="admin", dolgnost="admin", + login="admin", passwd="123456") + sess.add(newuser) + sess.commit() + sess.close() + """ + +if __name__ == '__main__': + create_db()