Advertisement
Guest User

Untitled

a guest
Jan 10th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 60.40 KB | None | 0 0
  1. import tkinter as tk
  2.  
  3. from tkinter import messagebox, StringVar
  4. from functools import partial
  5. from sqlalchemy import create_engine
  6. from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, select, Date, update
  7. metadata = MetaData()
  8.  
  9. engine = create_engine('sqlite:///sql_database:', echo=True)
  10. conn = engine.connect()
  11.  
  12. btnCRUDROW = 1
  13. ACCOUNTROW = 2
  14. PASSWORDROW = 3
  15. btnLOGINROW = 4
  16.  
  17.  
  18.  
  19. user_Info = {'admin':'pass01', 'manage':'pass02'}
  20. product_data = []
  21. class product:
  22.     def __init__(self, name, price, effectivedate, origin):
  23.         self.name = name
  24.         self.price = price
  25.         self.effectivedate = effectivedate
  26.         self.origin = origin
  27.  
  28.     def create(self):
  29.         pass
  30.     def edit(self, name, stock, price, purchase, effectivedate, origin, returns):
  31.         self.name = name
  32.         self.stock = stock
  33.         self.price = price
  34.         self.purchase = purchase
  35.         self.effectivedate = effectivedate
  36.         self.origin = origin
  37.         self.returns = returns
  38.     def remove(self):
  39.         pass
  40.  
  41.  
  42. product_table = Table(
  43.     'product_table', metadata,
  44.     Column('id', Integer, primary_key=True),
  45.     Column('name', String),
  46.     # Column('stock', String),
  47.     Column('price', Integer),
  48.     Column('effectivedate', String),
  49.     Column('origin', String),
  50.     # Column('returns', String),
  51. )
  52.  
  53. purchase_table = Table(
  54.     'purchase_table', metadata,
  55.     Column('id', Integer, primary_key=True),
  56.     Column('product_id', None, ForeignKey('product_table.id')),
  57.     Column('time', String),
  58.     Column('count', Integer),
  59.     Column('Manufacturers', String),
  60.  
  61. )
  62.  
  63. stock_table = Table(
  64.     'stock_table', metadata,
  65.     Column('id', Integer, primary_key=True),
  66.     Column('product_id', None, ForeignKey('product_table.id')),
  67.     Column('count', Integer)
  68. )
  69.  
  70. returns_table = Table(
  71.     'returns_table', metadata,
  72.     Column('id', Integer, primary_key=True),
  73.     Column('product_id', None, ForeignKey('product_table.id')),
  74.     Column('time', String),
  75.     Column('count', Integer),
  76.     Column('money', String),
  77.     Column('Manufacturers', String)
  78. )
  79.  
  80. employee_table = Table(
  81.     'employee_table', metadata,
  82.     Column('id', Integer, primary_key=True),
  83.     Column('part_id', None, ForeignKey('part_table.id')),
  84.     Column('branch_id', None, ForeignKey('branch_table.id')),
  85.     Column('name', String),
  86.     Column('gender', Integer)
  87. )
  88.  
  89. part_table = Table(
  90.     'part_table', metadata,
  91.     Column('id', Integer, primary_key=True),
  92.     Column('name', String),
  93.     Column('number', Integer),
  94. )
  95.  
  96. branch_table = Table(
  97.     'branch_table', metadata,
  98.     Column('id', Integer, primary_key=True),
  99.     Column('name', String),
  100.     Column('address', String),
  101.     Column('phone', Integer)
  102. )
  103. leave_table = Table(
  104.     'leave_table', metadata,
  105.     Column('id', Integer, primary_key=True),
  106.     Column('employee_id', None, ForeignKey('employee_table.id')),
  107.     Column('kind', String),
  108.     Column('date', String)
  109. )
  110. attendance_table = Table(
  111.     'attendance_table', metadata,
  112.     Column('id', Integer, primary_key=True),
  113.     Column('employee_id', None, ForeignKey('employee_table.id')),
  114.     Column('place', String),
  115.     Column('date', String)
  116. )
  117.  
  118. metadata.create_all(engine)
  119.  
  120. def open_main_window(old_page):
  121.     # btn pixel
  122.     X_PIXEL01 = 0
  123.     X_PIXEL02 = 80
  124.     X_PIXEL03 = 160
  125.     Y_PIXEL01 = 20
  126.     Y_PIXEL02 = 50
  127.     Y_PIXEL03 = 80
  128.     global G_user_name
  129.  
  130.     old_page.destroy()
  131.     win_main = tk.Tk()
  132.     win_main.title("main page")
  133.     win_main.geometry('300x200')
  134.     label_Lusername = tk.Label(win_main, text="User Name:").place(x=0,y=0)
  135.     label_username = tk.Label(win_main,text=G_user_name).place(x=80, y=0)
  136.  
  137.     if G_user_name == 'admin':
  138.         btn_open_page01 = tk.Button(win_main, text='products', command=lambda: select_product_window(win_main)).place(
  139.             x=X_PIXEL01, y=Y_PIXEL01)
  140.         btn_open_page02 = tk.Button(win_main, text='purchase', command=lambda: select_purchase_window(win_main)).place(
  141.             x=X_PIXEL02, y=Y_PIXEL01)
  142.         btn_open_page04 = tk.Button(win_main, text='returns', command=lambda: select_returns_window(win_main)).place(
  143.             x=X_PIXEL01, y=Y_PIXEL02)
  144.         btn_open_page05 = tk.Button(win_main, text='employee', command=lambda: select_employee_window(win_main)).place(
  145.             x=X_PIXEL02, y=Y_PIXEL02)
  146.         btn_open_page06 = tk.Button(win_main, text='part', command=lambda: select_part_window(win_main)).place(
  147.             x=X_PIXEL03, y=Y_PIXEL02)
  148.         btn_open_page07 = tk.Button(win_main, text='branch', command=lambda: select_branch_window(win_main)).place(
  149.             x=X_PIXEL01, y=Y_PIXEL03)
  150.         btn_open_page08 = tk.Button(win_main, text='leave', command=lambda: select_leave_window(win_main)).place(
  151.             x=X_PIXEL02, y=Y_PIXEL03)
  152.         btn_open_page09 = tk.Button(win_main, text='attendance',
  153.                                     command=lambda: select_attendance_window(win_main)).place(x=X_PIXEL03, y=Y_PIXEL03)
  154.     else:
  155.         btn_open_page01 = tk.Button(win_main, text='products', command=lambda: select_product_window(win_main)).place(
  156.             x=X_PIXEL01, y=Y_PIXEL01)
  157.         btn_open_page02 = tk.Button(win_main, text='purchase', command=lambda: select_purchase_window(win_main)).place(
  158.             x=X_PIXEL02, y=Y_PIXEL01)
  159.         btn_open_page03 = tk.Button(win_main, text='stock', command=lambda: select_stock_window(win_main)).place(
  160.             x=X_PIXEL03, y=Y_PIXEL01)
  161.         btn_open_page04 = tk.Button(win_main, text='returns', command=lambda: select_returns_window(win_main)).place(
  162.             x=X_PIXEL01, y=Y_PIXEL02)
  163.         btn_open_page05 = tk.Button(win_main, text='employee', command=lambda: select_employee_window(win_main)).place(
  164.             x=X_PIXEL02, y=Y_PIXEL02)
  165.         btn_open_page06 = tk.Button(win_main, text='part', command=lambda: select_part_window(win_main)).place(
  166.             x=X_PIXEL03, y=Y_PIXEL02)
  167.         btn_open_page07 = tk.Button(win_main, text='branch', command=lambda: select_branch_window(win_main)).place(
  168.             x=X_PIXEL01, y=Y_PIXEL03)
  169.         btn_open_page08 = tk.Button(win_main, text='leave', command=lambda: select_leave_window(win_main)).place(
  170.             x=X_PIXEL02, y=Y_PIXEL03)
  171.         btn_open_page09 = tk.Button(win_main, text='attendance',
  172.                                     command=lambda: select_attendance_window(win_main)).place(x=X_PIXEL03, y=Y_PIXEL03)
  173.  
  174. # def open_page01_window(old_page):
  175. #     LABEL_YPIXEL = 20
  176. #     NAME_XPIXEL = 0
  177. #     STOCK_XPIXEL = 80
  178. #     PRICE_XPIXEL = 160
  179. #     PURCHASE_XPIXEL = 240
  180. #     EFFECT_XPIXEL = 350
  181. #     ORIGIN_XPIXEL = 430
  182. #     RETURNS_XPIXEL = 500
  183. #     line = 0
  184. #     global product_data
  185. #     old_page.destroy()
  186. #     win_products = tk.Tk()
  187. #     win_products.title("page01")
  188. #     win_products.geometry('600x400')
  189. #
  190. #     label_Lusername = tk.Label(win_products, text="User Name:").place(x=0, y=0)
  191. #     label_username = tk.Label(win_products, text=G_user_name).place(x=80, y=0)
  192. #     label_Lname = tk.Label(win_products, text="Name").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  193. #     label_Lstock = tk.Label(win_products, text="Stock").place(x=STOCK_XPIXEL, y=LABEL_YPIXEL)
  194. #     label_Lprice = tk.Label(win_products, text="Price").place(x=PRICE_XPIXEL, y=LABEL_YPIXEL)
  195. #     label_Lpurchase = tk.Label(win_products, text="Purchase").place(x=PURCHASE_XPIXEL, y=LABEL_YPIXEL)
  196. #     label_Leffectivedate = tk.Label(win_products, text="Date").place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL)
  197. #     label_Lorigin = tk.Label(win_products, text="Origin").place(x=ORIGIN_XPIXEL, y=LABEL_YPIXEL)
  198. #     label_Lreturns = tk.Label(win_products, text="Returns").place(x=RETURNS_XPIXEL, y=LABEL_YPIXEL)
  199. #     btn_new_object = tk.Button(win_products, text='Insert', command=lambda: Product_insert_window(win_products)).pack(
  200. #         side="bottom")
  201. #     btn_open_main = tk.Button(win_products, text='return', command=lambda:open_main_window(win_products)).pack(
  202. #         side="bottom")
  203. #
  204. #     selectsql_product = select([product_table])
  205. #     result = conn.execute(selectsql_product)
  206. #
  207. #     for row in result:
  208. #
  209. #         # print('row:', row)
  210. #         label_prd_name = tk.Label(win_products, text=row[1]).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  211. #         label_prd_stock = tk.Label(win_products, text=row[2]).place(x=STOCK_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  212. #         label_prd_price = tk.Label(win_products, text=row[3]).place(x=PRICE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  213. #         label_prd_purchase = tk.Label(win_products, text=row[4]).place(x=PURCHASE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  214. #         label_prd_effectivedate = tk.Label(win_products, text=row[4]).place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  215. #         label_prd_origin = tk.Label(win_products, text=row[5]).place(x=ORIGIN_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  216. #         label_prd_returns = tk.Label(win_products, text=row[6]).place(x=RETURNS_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  217. #
  218. #         line+=1
  219.  
  220.  
  221. def select_product_window(old_page):
  222.     LABEL_YPIXEL = 20
  223.     NAME_XPIXEL = 0
  224.     PRICE_XPIXEL = 130
  225.     EFFECT_XPIXEL = 280
  226.     ORIGIN_XPIXEL = 350
  227.     EDIT_XPIXEL = 480
  228.     REMOVE_XPIXEL = 530
  229.     line = 0
  230.     global product_data
  231.     old_page.destroy()
  232.     win_products = tk.Tk()
  233.     win_products.title("product")
  234.     win_products.geometry('600x400')
  235.  
  236.     label_Lusername = tk.Label(win_products, text="User Name:").place(x=0, y=0)
  237.     label_username = tk.Label(win_products, text=G_user_name).place(x=80, y=0)
  238.     label_Lname = tk.Label(win_products, text="Name").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  239.     label_Lprice = tk.Label(win_products, text="Price").place(x=PRICE_XPIXEL, y=LABEL_YPIXEL)
  240.     label_Leffectivedate = tk.Label(win_products, text="Date").place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL)
  241.     label_Lorigin = tk.Label(win_products, text="Origin").place(x=ORIGIN_XPIXEL, y=LABEL_YPIXEL)
  242.     btn_new_object = tk.Button(win_products, text='Insert', command=lambda: Product_insert_window(win_products)).pack(
  243.         side="bottom")
  244.     btn_open_main = tk.Button(win_products, text='return', command=lambda:open_main_window(win_products)).pack(
  245.         side="bottom")
  246.  
  247.     selectsql_product = select([product_table])
  248.     result = conn.execute(selectsql_product)
  249.  
  250.     for row in result:
  251.         label_prd_name = tk.Label(win_products, text=row[1]).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  252.         label_prd_price = tk.Label(win_products, text=row[2]).place(x=PRICE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  253.         label_prd_effectivedate = tk.Label(win_products, text=row[3]).place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  254.         label_prd_origin = tk.Label(win_products, text=row[4]).place(x=ORIGIN_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  255.         btn_edit_prd = tk.Button(win_products, text='edit', command=partial(edit_product_window, win_products, row[0]))\
  256.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  257.         btn_delete_prd = tk.Button(win_products, text='delete', command=partial(delete_product, win_products, row[0])) \
  258.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  259.         line+=1
  260.  
  261. def Product_insert_window(old_page):
  262.     old_page.destroy()
  263.     win_products_insert = tk.Tk()
  264.     win_products_insert.title("Insert product")
  265.     win_products_insert.geometry('450x300')
  266.  
  267.     label_Lname = tk.Label(win_products_insert, text="Name").grid(column=0, row=0)
  268.     entry_name = tk.Entry(win_products_insert)
  269.     entry_name.grid(column=1, row=0)
  270.     label_Lprice = tk.Label(win_products_insert, text="price").grid(column=0, row=1)
  271.     entry_price = tk.Entry(win_products_insert)
  272.     entry_price.grid(column=1, row=1)
  273.     label_Leffectivedate = tk.Label(win_products_insert, text="effectivedate").grid(column=0, row=2)
  274.     entry_effectivedate = tk.Entry(win_products_insert)
  275.     entry_effectivedate.grid(column=1, row=2)
  276.     label_Lorigin = tk.Label(win_products_insert, text="origin").grid(column=0, row=3)
  277.     entry_origin = tk.Entry(win_products_insert)
  278.     entry_origin.grid(column=1, row=3)
  279.     btn_insert = tk.Button(win_products_insert, text="insert", command= lambda:insert_product(win_products_insert,
  280.         entry_name.get(), entry_price.get(), entry_effectivedate.get(), entry_origin.get())).place(x=200, y=250)
  281.     btn_return = tk.Button(win_products_insert, text="return", command= lambda:select_product_window(win_products_insert))\
  282.         .place(x=300, y=250)
  283.  
  284. def edit_product_window(old_page, input_id):
  285.     print('id:', input_id)
  286.     old_page.destroy()
  287.     win_products_insert = tk.Tk()
  288.     win_products_insert.title("Edit product")
  289.     win_products_insert.geometry('450x300')
  290.  
  291.     selectsql_product = select([product_table]).\
  292.         where(product_table.c.id == input_id)
  293.     result = conn.execute(selectsql_product)
  294.     print('result:', result)
  295.  
  296.     string_name = StringVar()
  297.     string_price = StringVar()
  298.     string_effectivedate = StringVar()
  299.     string_origin = StringVar()
  300.  
  301.     for row in result:
  302.         string_name.set(row[1])
  303.         string_price.set(row[2])
  304.         string_effectivedate.set(row[3])
  305.         string_origin.set(row[4])
  306.  
  307.     label_Lname = tk.Label(win_products_insert, text="Name").grid(column=0, row=0)
  308.     entry_name = tk.Entry(win_products_insert, textvariable = string_name)
  309.     entry_name.grid(column=1, row=0)
  310.     label_Lprice = tk.Label(win_products_insert, text="price").grid(column=0, row=1)
  311.     entry_price = tk.Entry(win_products_insert, textvariable = string_price)
  312.     entry_price.grid(column=1, row=1)
  313.     label_Leffectivedate = tk.Label(win_products_insert, text="effectivedate").grid(column=0, row=2)
  314.     entry_effectivedate = tk.Entry(win_products_insert, textvariable = string_effectivedate)
  315.     entry_effectivedate.grid(column=1, row=2)
  316.     label_Lorigin = tk.Label(win_products_insert, text="origin").grid(column=0, row=3)
  317.     entry_origin = tk.Entry(win_products_insert, textvariable = string_origin)
  318.     entry_origin.grid(column=1, row=3)
  319.  
  320.  
  321.     btn_edit = tk.Button(win_products_insert, text="insert", command= lambda:edit_product(win_products_insert,
  322.         entry_name.get(), entry_price.get(), entry_effectivedate.get(), entry_origin.get(), input_id)).place(x=200, y=250)
  323.     btn_return = tk.Button(win_products_insert, text="return", command= lambda:select_product_window(win_products_insert))\
  324.         .place(x=300, y=250)
  325.  
  326. def insert_product(old_page, name, price, effect, origin):
  327.     global product_data
  328.     test_product = product(name, price, effect, origin)
  329.  
  330.     selectsql_product = select([product_table])
  331.     result = conn.execute(selectsql_product)
  332.     print (result)
  333.     id = 1
  334.     for row in result:
  335.         if  not row[0] < id:
  336.             id = row[0]+1
  337.     ins = product_table.insert().values(
  338.         id= id,
  339.         name = test_product.name,
  340.         price = test_product.price,
  341.         effectivedate = test_product.effectivedate,
  342.         origin = test_product.origin)
  343.     conn.execute(ins)
  344.     select_product_window(old_page)
  345.  
  346. def edit_product(old_page, name, price, effect, origin, input_id):
  347.     editsql_product = product_table.update().where(product_table.c.id == input_id).values(
  348.         name = name,
  349.         price = price,
  350.         effectivedate = effect,
  351.         origin = origin
  352.     )
  353.     conn.execute(editsql_product)
  354.     select_product_window(old_page)
  355.  
  356. def delete_product(old_page, input_id):
  357.     deletesql_product = product_table.delete().where(product_table.c.id == input_id)
  358.     conn.execute(deletesql_product)
  359.     select_product_window(old_page)
  360.  
  361.  
  362. # employee
  363. def select_employee_window(old_page):
  364.     LABEL_YPIXEL = 20
  365.     PART_XPIXEL = 0
  366.     BRANCH_XPIXEL = 130
  367.     NAME_XPIXEL = 200
  368.     GENDER_XPIXEL = 270
  369.  
  370.     EDIT_XPIXEL = 480
  371.     REMOVE_XPIXEL = 530
  372.     line = 0
  373.     global product_data
  374.     old_page.destroy()
  375.     win_employee = tk.Tk()
  376.     win_employee.title("employee")
  377.     win_employee.geometry('600x400')
  378.  
  379.     tk.Label(win_employee, text="User Name:").place(x=0, y=0)
  380.     tk.Label(win_employee, text=G_user_name).place(x=80, y=0)
  381.     tk.Label(win_employee, text="part").place(x=PART_XPIXEL, y=LABEL_YPIXEL)
  382.     tk.Label(win_employee, text="branch").place(x=BRANCH_XPIXEL, y=LABEL_YPIXEL)
  383.     tk.Label(win_employee, text="Name").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  384.     tk.Label(win_employee, text="gender").place(x=GENDER_XPIXEL, y=LABEL_YPIXEL)
  385.  
  386.     tk.Button(win_employee, text='Insert', command=lambda:employee_insert_window(win_employee)).pack(
  387.         side="bottom")
  388.     tk.Button(win_employee, text='return', command=lambda:open_main_window(win_employee)).pack(
  389.         side="bottom")
  390.  
  391.     selectsql_employee = select([employee_table])
  392.     result = conn.execute(selectsql_employee)
  393.  
  394.  
  395.     for row in result:
  396.         part_name = ''
  397.         branch_name = ''
  398.         selectsql_part_by_part_id = select([part_table]).where(part_table.c.id == row[1])
  399.         result_part= conn.execute(selectsql_part_by_part_id)
  400.         selectsql_branch_by_braanch_id = select([branch_table]).where(branch_table.c.id == row[2])
  401.         result_branch= conn.execute(selectsql_branch_by_braanch_id)
  402.         for part in result_part:
  403.             part_name = part[1]
  404.         for branch in result_branch:
  405.             branch_name = branch[1]
  406.         tk.Label(win_employee, text=part_name).place(x=PART_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  407.         tk.Label(win_employee, text=branch_name).place(x=BRANCH_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  408.         tk.Label(win_employee, text=row[3]).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  409.         tk.Label(win_employee, text=row[4]).place(x=GENDER_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  410.         tk.Button(win_employee, text='edit', command=partial(edit_employee_window, win_employee, row[0]))\
  411.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  412.         tk.Button(win_employee, text='delete', command=partial(delete_employee, win_employee, row[0])) \
  413.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  414.         line+=1
  415.  
  416. def employee_insert_window(old_page):
  417.     old_page.destroy()
  418.     win_employee_insert = tk.Tk()
  419.     win_employee_insert.title("Insert product")
  420.     win_employee_insert.geometry('450x300')
  421.  
  422.     tk.Label(win_employee_insert, text="part").grid(column=0, row=0)
  423.     entry_part = tk.Entry(win_employee_insert)
  424.     entry_part.grid(column=1, row=0)
  425.     tk.Label(win_employee_insert, text="branch").grid(column=0, row=1)
  426.     entry_branch = tk.Entry(win_employee_insert)
  427.     entry_branch.grid(column=1, row=1)
  428.     tk.Label(win_employee_insert, text="Name").grid(column=0, row=2)
  429.     entry_name = tk.Entry(win_employee_insert)
  430.     entry_name.grid(column=1, row=2)
  431.     tk.Label(win_employee_insert, text="gender").grid(column=0, row=3)
  432.     entry_gender = tk.Entry(win_employee_insert)
  433.     entry_gender.grid(column=1, row=3)
  434.     tk.Button(win_employee_insert, text="insert", command= lambda:insert_employee(win_employee_insert,
  435.         entry_part.get(), entry_branch.get(), entry_name.get(), entry_gender.get())).place(x=200, y=250)
  436.     tk.Button(win_employee_insert, text="return", command= lambda:select_employee_window(win_employee_insert))\
  437.         .place(x=300, y=250)
  438.  
  439. def edit_employee_window(old_page, input_id):
  440.     old_page.destroy()
  441.     win_employee_insert = tk.Tk()
  442.     win_employee_insert.title("Edit employee")
  443.     win_employee_insert.geometry('450x300')
  444.  
  445.     selectsql_employee = select([employee_table]).\
  446.         where(employee_table.c.id == input_id)
  447.     result = conn.execute(selectsql_employee)
  448.  
  449.     string_part_id = StringVar()
  450.     string_branch_id = StringVar()
  451.     string_name = StringVar()
  452.     string_gender = StringVar()
  453.  
  454.     for row in result:
  455.         part_name =''
  456.         branch_name =''
  457.         selectsql_part_by_part_id = select([part_table]). \
  458.             where(part_table.c.id == row[1])
  459.         result_part = conn.execute(selectsql_part_by_part_id)
  460.         for part in result_part:
  461.             part_name = part[1]
  462.         selectsql_branch_by_branch_id = select([branch_table]). \
  463.             where(branch_table.c.id == row[2])
  464.         result_branch = conn.execute(selectsql_branch_by_branch_id)
  465.         for branch in result_branch:
  466.             branch_name = branch[2]
  467.         string_part_id.set(part_name)
  468.         string_branch_id.set(branch_name)
  469.         string_name.set(row[3])
  470.         string_gender.set(row[4])
  471.  
  472.     tk.Label(win_employee_insert, text="part").grid(column=0, row=0)
  473.     entry_part = tk.Entry(win_employee_insert, textvariable = string_part_id)
  474.     entry_part.grid(column=1, row=0)
  475.     tk.Label(win_employee_insert, text="branch").grid(column=0, row=1)
  476.     entry_branch = tk.Entry(win_employee_insert, textvariable = string_branch_id)
  477.     entry_branch.grid(column=1, row=1)
  478.     tk.Label(win_employee_insert, text="Name").grid(column=0, row=3)
  479.     entry_name = tk.Entry(win_employee_insert, textvariable=string_name)
  480.     entry_name.grid(column=1, row=3)
  481.     tk.Label(win_employee_insert, text="price").grid(column=0, row=4)
  482.     entry_price = tk.Entry(win_employee_insert, textvariable=string_gender)
  483.     entry_price.grid(column=1, row=4)
  484.  
  485.  
  486.     tk.Button(win_employee_insert, text="insert", command= lambda:edit_employee(win_employee_insert,
  487.         entry_part.get(),entry_branch.get(),entry_name.get(), entry_price.get(), input_id)).place(x=200, y=250)
  488.     tk.Button(win_employee_insert, text="return", command= lambda:select_employee_window(win_employee_insert))\
  489.         .place(x=300, y=250)
  490.  
  491. def insert_employee(old_page, part, branch, name, gender):
  492.  
  493.     part_id = 0
  494.     branch_id = 0
  495.     part_exist = 0
  496.     branch_exist = 0
  497.     selectsql_part_id_by_part = select([part_table]).where(part_table.c.name == part)
  498.     result_part_id = conn.execute(selectsql_part_id_by_part)
  499.     for part in result_part_id:
  500.         part_id = part[0]
  501.     selectsql_branch_id_by_branch = select([branch_table]).where(branch_table.c.name == branch)
  502.     result_branch_id = conn.execute(selectsql_branch_id_by_branch)
  503.     for part in result_branch_id:
  504.         branch_id = part[0]
  505.     selectsql_employee = select([employee_table])
  506.     result = conn.execute(selectsql_employee)
  507.     id = 1
  508.     if part_id and branch_id:
  509.         for row in result:
  510.             if  not row[0] < id:
  511.                 id = row[0]+1
  512.         ins = employee_table.insert().values(
  513.             id= id,
  514.             part_id = part_id,
  515.             branch_id = branch_id,
  516.             name = name,
  517.             gender = gender
  518.         )
  519.         conn.execute(ins)
  520.     else:
  521.         messagebox.showerror(message='Error, your part or branch is wrong, try again.')
  522.         pass
  523.     select_employee_window(old_page)
  524.  
  525. def edit_employee(old_page, part, branch, name, gender, input_id):
  526.     part_id = 0
  527.     branch_id = 0
  528.     selectsql_part_id_by_part = select([part_table]).where(part_table.c.name == part)
  529.     result_part_id = conn.execute(selectsql_part_id_by_part)
  530.     for part in result_part_id:
  531.         part_id = part[0]
  532.     selectsql_branch_id_by_branch = select([branch_table]).where(branch_table.c.name == branch)
  533.     result_branch_id = conn.execute(selectsql_branch_id_by_branch)
  534.     for branch in result_branch_id:
  535.         branch_id = branch[0]
  536.     if part_id and branch_id:
  537.         editsql_employee = employee_table.update().where(employee_table.c.id == input_id).values(
  538.             part_id = part_id,
  539.             branch_id = branch_id,
  540.             name = name,
  541.             gender = gender
  542.         )
  543.         conn.execute(editsql_employee)
  544.     else:
  545.         messagebox.showerror(message='Error, your part or branch is wrong, try again.')
  546.     select_employee_window(old_page)
  547.  
  548. def delete_employee(old_page, input_id):
  549.     deletesql_employee = employee_table.delete().where(employee_table.c.id == input_id)
  550.     conn.execute(deletesql_employee)
  551.     select_employee_window(old_page)
  552.  
  553. # part
  554. def select_part_window(old_page):
  555.     LABEL_YPIXEL = 20
  556.     NAME_XPIXEL = 0
  557.     NUMBER_XPIXEL = 130
  558.     EDIT_XPIXEL = 480
  559.     REMOVE_XPIXEL = 530
  560.     line = 0
  561.     old_page.destroy()
  562.     win_part = tk.Tk()
  563.     win_part.title("part")
  564.     win_part.geometry('600x400')
  565.  
  566.     tk.Label(win_part, text="User Name:").place(x=0, y=0)
  567.     tk.Label(win_part, text=G_user_name).place(x=80, y=0)
  568.     tk.Label(win_part, text="Name").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  569.     tk.Label(win_part, text="number").place(x=NUMBER_XPIXEL, y=LABEL_YPIXEL)
  570.     tk.Button(win_part, text='Insert', command=lambda: part_insert_window(win_part)).pack(
  571.         side="bottom")
  572.     tk.Button(win_part, text='return', command=lambda:open_main_window(win_part)).pack(
  573.         side="bottom")
  574.  
  575.     selectsql_part = select([part_table])
  576.     result = conn.execute(selectsql_part)
  577.  
  578.     for row in result:
  579.         tk.Label(win_part, text=row[1]).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  580.         tk.Label(win_part, text=row[2]).place(x=NUMBER_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  581.         tk.Button(win_part, text='edit', command=partial(edit_part_window, win_part, row[0]))\
  582.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  583.         tk.Button(win_part, text='delete', command=partial(delete_part, win_part, row[0])) \
  584.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  585.         line+=1
  586.  
  587. def part_insert_window(old_page):
  588.     old_page.destroy()
  589.     win_part_insert = tk.Tk()
  590.     win_part_insert.title("Insert part")
  591.     win_part_insert.geometry('450x300')
  592.  
  593.     tk.Label(win_part_insert, text="Name").grid(column=0, row=0)
  594.     entry_name = tk.Entry(win_part_insert)
  595.     entry_name.grid(column=1, row=0)
  596.     tk.Label(win_part_insert, text="number").grid(column=0, row=1)
  597.     entry_number = tk.Entry(win_part_insert)
  598.     entry_number.grid(column=1, row=1)
  599.     tk.Button(win_part_insert, text="insert", command= lambda:insert_part(win_part_insert,entry_name.get(),
  600.                                                                              entry_number.get())).place(x=200, y=250)
  601.     tk.Button(win_part_insert, text="return", command= lambda:select_part_window(win_part_insert)).place(x=300, y=250)
  602.  
  603. def edit_part_window(old_page, input_id):
  604.     old_page.destroy()
  605.     win_part_insert = tk.Tk()
  606.     win_part_insert.title("Edit product")
  607.     win_part_insert.geometry('450x300')
  608.  
  609.     selectsql_part = select([part_table]).\
  610.         where(part_table.c.id == input_id)
  611.     result = conn.execute(selectsql_part)
  612.  
  613.     string_name = StringVar()
  614.     string_number = StringVar()
  615.  
  616.     for row in result:
  617.         string_name.set(row[1])
  618.         string_number.set(row[2])
  619.  
  620.     label_Lname = tk.Label(win_part_insert, text="Name").grid(column=0, row=0)
  621.     entry_name = tk.Entry(win_part_insert, textvariable = string_name)
  622.     entry_name.grid(column=1, row=0)
  623.     label_Lprice = tk.Label(win_part_insert, text="price").grid(column=0, row=2)
  624.     entry_number = tk.Entry(win_part_insert, textvariable = string_number)
  625.     entry_number.grid(column=1, row=2)
  626.  
  627.     btn_edit = tk.Button(win_part_insert, text="insert", command= lambda:edit_part(win_part_insert,
  628.         entry_name.get(), entry_number.get(), input_id)).place(x=200, y=250)
  629.     btn_return = tk.Button(win_part_insert, text="return", command= lambda:select_part_window(win_part_insert))\
  630.         .place(x=300, y=250)
  631.  
  632. def insert_part(old_page, name, number):
  633.  
  634.     selectsql_part = select([part_table])
  635.     result = conn.execute(selectsql_part)
  636.     id = 1
  637.     for row in result:
  638.         if  not row[0] < id:
  639.             id = row[0]+1
  640.     ins = part_table.insert().values(
  641.         id= id,
  642.         name = name,
  643.         number = number)
  644.     conn.execute(ins)
  645.     select_part_window(old_page)
  646.  
  647. def edit_part(old_page, name, number, input_id):
  648.     editsql_product = part_table.update().where(part_table.c.id == input_id).values(
  649.         name = name,
  650.         number = number
  651.     )
  652.     conn.execute(editsql_product)
  653.     select_part_window(old_page)
  654.  
  655. def delete_part(old_page, input_id):
  656.     deletesql_part = part_table.delete().where(part_table.c.id == input_id)
  657.     conn.execute(deletesql_part)
  658.     select_part_window(old_page)
  659. # branch
  660. def select_branch_window(old_page):
  661.     LABEL_YPIXEL = 20
  662.     NAME_XPIXEL = 0
  663.     PRICE_XPIXEL = 130
  664.     EFFECT_XPIXEL = 280
  665.     EDIT_XPIXEL = 480
  666.     REMOVE_XPIXEL = 530
  667.     line = 0
  668.  
  669.     old_page.destroy()
  670.     win_branch = tk.Tk()
  671.     win_branch.title("branch")
  672.     win_branch.geometry('600x400')
  673.  
  674.     tk.Label(win_branch, text="User Name:").place(x=0, y=0)
  675.     tk.Label(win_branch, text=G_user_name).place(x=80, y=0)
  676.     tk.Label(win_branch, text="Name").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  677.     tk.Label(win_branch, text="address").place(x=PRICE_XPIXEL, y=LABEL_YPIXEL)
  678.     tk.Label(win_branch, text="phone").place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL)
  679.     tk.Button(win_branch, text='Insert', command=lambda: branch_insert_window(win_branch)).pack(side="bottom")
  680.     tk.Button(win_branch, text='return', command=lambda:open_main_window(win_branch)).pack(side="bottom")
  681.  
  682.     selectsql_branch = select([branch_table])
  683.     result = conn.execute(selectsql_branch)
  684.  
  685.     for row in result:
  686.         tk.Label(win_branch, text=row[1]).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  687.         tk.Label(win_branch, text=row[2]).place(x=PRICE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  688.         tk.Label(win_branch, text=row[3]).place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  689.         tk.Button(win_branch, text='edit', command=partial(edit_branch_window, win_branch, row[0]))\
  690.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  691.         tk.Button(win_branch, text='delete', command=partial(delete_branch, win_branch, row[0])) \
  692.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  693.         line+=1
  694.  
  695. def branch_insert_window(old_page):
  696.     old_page.destroy()
  697.     win_branch_insert = tk.Tk()
  698.     win_branch_insert.title("Insert product")
  699.     win_branch_insert.geometry('450x300')
  700.  
  701.     tk.Label(win_branch_insert, text="Name").grid(column=0, row=0)
  702.     entry_name = tk.Entry(win_branch_insert)
  703.     entry_name.grid(column=1, row=0)
  704.     tk.Label(win_branch_insert, text="address").grid(column=0, row=1)
  705.     entry_address = tk.Entry(win_branch_insert)
  706.     entry_address.grid(column=1, row=1)
  707.     tk.Label(win_branch_insert, text="phone").grid(column=0, row=2)
  708.     entry_phone = tk.Entry(win_branch_insert)
  709.     entry_phone.grid(column=1, row=2)
  710.     btn_insert = tk.Button(win_branch_insert, text="insert", command= lambda:insert_branch(win_branch_insert,
  711.         entry_name.get(), entry_address.get(), entry_phone.get())).place(x=200, y=250)
  712.     btn_return = tk.Button(win_branch_insert, text="return", command= lambda:select_branch_window(win_branch_insert))\
  713.         .place(x=300, y=250)
  714.  
  715. def edit_branch_window(old_page, input_id):
  716.     print('id:', input_id)
  717.     old_page.destroy()
  718.     win_branch_insert = tk.Tk()
  719.     win_branch_insert.title("Edit product")
  720.     win_branch_insert.geometry('450x300')
  721.  
  722.     selectsql_product = select([branch_table]).\
  723.         where(branch_table.c.id == input_id)
  724.     result = conn.execute(selectsql_product)
  725.     print('result:', result)
  726.     purchase_product_id = select([purchase_table]). \
  727.         where(purchase_table.c.product_id == input_id)
  728.     selectsql_purchase_result = conn.execute(selectsql_product)
  729.  
  730.     string_name = StringVar()
  731.     string_address = StringVar()
  732.     string_phone = StringVar()
  733.  
  734.  
  735.     for row in result:
  736.         string_name.set(row[1])
  737.         string_address.set(row[2])
  738.         string_phone.set(row[3])
  739.  
  740.     tk.Label(win_branch_insert, text="Name").grid(column=0, row=0)
  741.     entry_name = tk.Entry(win_branch_insert, textvariable = string_name)
  742.     entry_name.grid(column=1, row=0)
  743.     tk.Label(win_branch_insert, text="address").grid(column=0, row=1)
  744.     entry_address = tk.Entry(win_branch_insert, textvariable = string_address)
  745.     entry_address.grid(column=1, row=1)
  746.     tk.Label(win_branch_insert, text="phone").grid(column=0, row=2)
  747.     entry_phone = tk.Entry(win_branch_insert, textvariable = string_phone)
  748.     entry_phone.grid(column=1, row=2)
  749.  
  750.  
  751.     btn_edit = tk.Button(win_branch_insert, text="insert", command= lambda:edit_branch(win_branch_insert,
  752.         entry_name.get(), entry_address.get(),entry_phone.get(), input_id)).place(x=200, y=250)
  753.     btn_return = tk.Button(win_branch_insert, text="return", command= lambda:select_branch_window(win_branch_insert))\
  754.         .place(x=300, y=250)
  755.  
  756. def insert_branch(old_page, name, address, phone):
  757.  
  758.     selectsql_branch = select([branch_table])
  759.     result = conn.execute(selectsql_branch)
  760.     id = 1
  761.     for row in result:
  762.         if  not row[0] < id:
  763.             id = row[0]+1
  764.     ins = branch_table.insert().values(
  765.         id= id,
  766.         name = name,
  767.         address = address,
  768.         phone = phone
  769.     )
  770.     conn.execute(ins)
  771.     select_branch_window(old_page)
  772.  
  773. def edit_branch(old_page, name, address, phone, input_id):
  774.     editsql_branch = branch_table.update().where(branch_table.c.id == input_id).values(
  775.         name = name,
  776.         address = address,
  777.         phone = phone
  778.     )
  779.     conn.execute(editsql_branch)
  780.     select_branch_window(old_page)
  781.  
  782. def delete_branch(old_page, input_id):
  783.     deletesql_branch = branch_table.delete().where(branch_table.c.id == input_id)
  784.     conn.execute(deletesql_branch)
  785.     select_product_window(old_page)
  786. # leave
  787. def select_leave_window(old_page):
  788.     LABEL_YPIXEL = 20
  789.     NAME_XPIXEL = 0
  790.     PRICE_XPIXEL = 130
  791.     EFFECT_XPIXEL = 280
  792.     EDIT_XPIXEL = 480
  793.     REMOVE_XPIXEL = 530
  794.     line = 0
  795.  
  796.     old_page.destroy()
  797.     win_leave = tk.Tk()
  798.     win_leave.title("leave")
  799.     win_leave.geometry('600x400')
  800.  
  801.     tk.Label(win_leave, text="User Name:").place(x=0, y=0)
  802.     tk.Label(win_leave, text=G_user_name).place(x=80, y=0)
  803.     tk.Label(win_leave, text="employee").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  804.     tk.Label(win_leave, text="kind").place(x=PRICE_XPIXEL, y=LABEL_YPIXEL)
  805.     tk.Label(win_leave, text="Date").place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL)
  806.     tk.Button(win_leave, text='Insert', command=lambda:leave_insert_window(win_leave)).pack(
  807.         side="bottom")
  808.     tk.Button(win_leave, text='return', command=lambda:open_main_window(win_leave)).pack(
  809.         side="bottom")
  810.  
  811.     employee_name = ''
  812.  
  813.     selectsql_leave = select([leave_table])
  814.     result = conn.execute(selectsql_leave)
  815.  
  816.     for row in result:
  817.         select_employee_name_by_employee_id = select([employee_table]).where(employee_table.c.id == row[1])
  818.         result_employee_name = conn.execute(select_employee_name_by_employee_id)
  819.         for employee in result_employee_name:
  820.             employee_name = employee[3]
  821.         tk.Label(win_leave, text=employee_name).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  822.         tk.Label(win_leave, text=row[2]).place(x=PRICE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  823.         tk.Label(win_leave, text=row[3]).place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  824.         tk.Button(win_leave, text='edit', command=partial(edit_leave_window, win_leave, row[0]))\
  825.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  826.         tk.Button(win_leave, text='delete', command=partial(delete_leave, win_leave, row[0])) \
  827.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  828.         line+=1
  829.  
  830. def leave_insert_window(old_page):
  831.     old_page.destroy()
  832.     win_leave_insert = tk.Tk()
  833.     win_leave_insert.title("Insert product")
  834.     win_leave_insert.geometry('450x300')
  835.  
  836.     tk.Label(win_leave_insert, text="employee").grid(column=0, row=0)
  837.     entry_employee = tk.Entry(win_leave_insert)
  838.     entry_employee.grid(column=1, row=0)
  839.     tk.Label(win_leave_insert, text="kind").grid(column=0, row=1)
  840.     entry_kind = tk.Entry(win_leave_insert)
  841.     entry_kind.grid(column=1, row=1)
  842.     tk.Label(win_leave_insert, text="Date").grid(column=0, row=2)
  843.     entry_date = tk.Entry(win_leave_insert)
  844.     entry_date.grid(column=1, row=2)
  845.     tk.Button(win_leave_insert, text="insert", command= lambda:insert_leave(win_leave_insert,
  846.         entry_employee.get(), entry_kind.get(), entry_date.get())).place(x=200, y=250)
  847.     tk.Button(win_leave_insert, text="return", command= lambda:select_leave_window(win_leave_insert)).place(x=300, y=250)
  848.  
  849. def edit_leave_window(old_page, input_id):
  850.     old_page.destroy()
  851.     win_leave_insert = tk.Tk()
  852.     win_leave_insert.title("Edit leave")
  853.     win_leave_insert.geometry('450x300')
  854.  
  855.     selectsql_leave = select([leave_table]).where(leave_table.c.id == input_id)
  856.     result = conn.execute(selectsql_leave)
  857.  
  858.     string_name = StringVar()
  859.     string_kind = StringVar()
  860.     string_date = StringVar()
  861.  
  862.     for row in result:
  863.         employee_name = ''
  864.         selectsql_employee_by_leave_id = select([employee_table]).where(employee_table.c.id == row[1])
  865.         result_employee = conn.execute(selectsql_employee_by_leave_id)
  866.         for employee in result_employee:
  867.             employee_name = employee[3]
  868.         string_name.set(employee_name)
  869.         string_kind.set(row[2])
  870.         string_date.set(row[3])
  871.  
  872.     tk.Label(win_leave_insert, text="employee").grid(column=0, row=0)
  873.     entry_name = tk.Entry(win_leave_insert, textvariable = string_name)
  874.     entry_name.grid(column=1, row=0)
  875.     tk.Label(win_leave_insert, text="kind").grid(column=0, row=1)
  876.     entry_kind = tk.Entry(win_leave_insert, textvariable = string_kind)
  877.     entry_kind.grid(column=1, row=1)
  878.     tk.Label(win_leave_insert, text="date").grid(column=0, row=2)
  879.     entry_date = tk.Entry(win_leave_insert, textvariable = string_date)
  880.     entry_date.grid(column=1, row=2)
  881.  
  882.     btn_edit = tk.Button(win_leave_insert, text="insert", command= lambda:edit_leave(win_leave_insert,
  883.         entry_name.get(), entry_kind.get(), entry_date.get(), input_id)).place(x=200, y=250)
  884.     btn_return = tk.Button(win_leave_insert, text="return", command= lambda:select_leave_window(win_leave_insert))\
  885.         .place(x=300, y=250)
  886.  
  887. def insert_leave(old_page, name, kind, date):
  888.     employee_id = 0
  889.     selectsql_leave = select([leave_table])
  890.     result = conn.execute(selectsql_leave)
  891.  
  892.     selectsql_employee_id_by_name = select([employee_table]).where(employee_table.c.name == name)
  893.     result_employee = conn.execute(selectsql_employee_id_by_name)
  894.     for employee in result_employee:
  895.         employee_id = employee[0]
  896.     id = 1
  897.     if employee_id:
  898.         for row in result:
  899.             if  not row[0] < id:
  900.                 id = row[0]+1
  901.         ins = leave_table.insert().values(
  902.             id= id,
  903.             employee_id = employee_id,
  904.             kind = kind,
  905.             date = date,
  906.         )
  907.         conn.execute(ins)
  908.     else:
  909.         messagebox.showerror(message='Error, your employee is wrong, try again.')
  910.     select_leave_window(old_page)
  911.  
  912. def edit_leave(old_page, name, kind, date, input_id):
  913.     employee_id = 0
  914.     selectsql_employee_id_by_name = select([employee_table]).where(employee_table.c.name == name)
  915.     result_employee = conn.execute(selectsql_employee_id_by_name)
  916.     for employee in result_employee:
  917.         employee_id = employee[0]
  918.     editsql_leave = leave_table.update().where(leave_table.c.id == input_id).values(
  919.         employee_id = employee_id,
  920.         kind = kind,
  921.         date = date
  922.     )
  923.     conn.execute(editsql_leave)
  924.     select_leave_window(old_page)
  925.  
  926. def delete_leave(old_page, input_id):
  927.     deletesql_leave = leave_table.delete().where(leave_table.c.id == input_id)
  928.     conn.execute(deletesql_leave)
  929.     select_leave_window(old_page)
  930. # attendance
  931. def select_attendance_window(old_page):
  932.     LABEL_YPIXEL = 20
  933.     NAME_XPIXEL = 0
  934.     PRICE_XPIXEL = 130
  935.     EFFECT_XPIXEL = 280
  936.     EDIT_XPIXEL = 480
  937.     REMOVE_XPIXEL = 530
  938.     line = 0
  939.  
  940.     old_page.destroy()
  941.     win_leave = tk.Tk()
  942.     win_leave.title("attendance")
  943.     win_leave.geometry('600x400')
  944.  
  945.     tk.Label(win_leave, text="User Name:").place(x=0, y=0)
  946.     tk.Label(win_leave, text=G_user_name).place(x=80, y=0)
  947.     tk.Label(win_leave, text="employee").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  948.     tk.Label(win_leave, text="place").place(x=PRICE_XPIXEL, y=LABEL_YPIXEL)
  949.     tk.Label(win_leave, text="Date").place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL)
  950.     tk.Button(win_leave, text='Insert', command=lambda:attendance_insert_window(win_leave)).pack(
  951.         side="bottom")
  952.     tk.Button(win_leave, text='return', command=lambda:open_main_window(win_leave)).pack(
  953.         side="bottom")
  954.  
  955.     employee_name = ''
  956.  
  957.     selectsql_attendance = select([attendance_table])
  958.     result = conn.execute(selectsql_attendance)
  959.  
  960.     for row in result:
  961.         select_employee_name_by_employee_id = select([employee_table]).where(employee_table.c.id == row[1])
  962.         result_employee_name = conn.execute(select_employee_name_by_employee_id)
  963.         for employee in result_employee_name:
  964.             employee_name = employee[3]
  965.         tk.Label(win_leave, text=employee_name).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  966.         tk.Label(win_leave, text=row[2]).place(x=PRICE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  967.         tk.Label(win_leave, text=row[3]).place(x=EFFECT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  968.         tk.Button(win_leave, text='edit', command=partial(edit_attendance_window, win_leave, row[0]))\
  969.             .place(x=EDIT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  970.         tk.Button(win_leave, text='delete', command=partial(delete_attendance, win_leave, row[0])) \
  971.             .place(x=REMOVE_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  972.         line+=1
  973.  
  974. def attendance_insert_window(old_page):
  975.     old_page.destroy()
  976.     win_leave_insert = tk.Tk()
  977.     win_leave_insert.title("Insert attendance")
  978.     win_leave_insert.geometry('450x300')
  979.  
  980.     tk.Label(win_leave_insert, text="employee").grid(column=0, row=0)
  981.     entry_employee = tk.Entry(win_leave_insert)
  982.     entry_employee.grid(column=1, row=0)
  983.     tk.Label(win_leave_insert, text="place").grid(column=0, row=1)
  984.     entry_kind = tk.Entry(win_leave_insert)
  985.     entry_kind.grid(column=1, row=1)
  986.     tk.Label(win_leave_insert, text="Date").grid(column=0, row=2)
  987.     entry_date = tk.Entry(win_leave_insert)
  988.     entry_date.grid(column=1, row=2)
  989.     tk.Button(win_leave_insert, text="insert", command= lambda:insert_attendance(win_leave_insert,
  990.         entry_employee.get(), entry_kind.get(), entry_date.get())).place(x=200, y=250)
  991.     tk.Button(win_leave_insert, text="return", command= lambda:select_attendance_window(win_leave_insert)).place(x=300, y=250)
  992.  
  993. def edit_attendance_window(old_page, input_id):
  994.     old_page.destroy()
  995.     win_leave_insert = tk.Tk()
  996.     win_leave_insert.title("Edit attendance")
  997.     win_leave_insert.geometry('450x300')
  998.  
  999.     selectsql_attendance = select([attendance_table]).where(attendance_table.c.id == input_id)
  1000.     result = conn.execute(selectsql_attendance)
  1001.  
  1002.     string_name = StringVar()
  1003.     string_kind = StringVar()
  1004.     string_date = StringVar()
  1005.  
  1006.     for row in result:
  1007.         employee_name = ''
  1008.         selectsql_employee_by_attendance_id = select([employee_table]).where(employee_table.c.id == row[1])
  1009.         result_employee = conn.execute(selectsql_employee_by_attendance_id)
  1010.         for employee in result_employee:
  1011.             employee_name = employee[3]
  1012.         string_name.set(employee_name)
  1013.         string_kind.set(row[2])
  1014.         string_date.set(row[3])
  1015.  
  1016.     tk.Label(win_leave_insert, text="employee").grid(column=0, row=0)
  1017.     entry_name = tk.Entry(win_leave_insert, textvariable = string_name)
  1018.     entry_name.grid(column=1, row=0)
  1019.     tk.Label(win_leave_insert, text="place").grid(column=0, row=1)
  1020.     entry_kind = tk.Entry(win_leave_insert, textvariable = string_kind)
  1021.     entry_kind.grid(column=1, row=1)
  1022.     tk.Label(win_leave_insert, text="date").grid(column=0, row=2)
  1023.     entry_date = tk.Entry(win_leave_insert, textvariable = string_date)
  1024.     entry_date.grid(column=1, row=2)
  1025.  
  1026.     btn_edit = tk.Button(win_leave_insert, text="insert", command= lambda:edit_attendance(win_leave_insert,
  1027.         entry_name.get(), entry_kind.get(), entry_date.get(), input_id)).place(x=200, y=250)
  1028.     btn_return = tk.Button(win_leave_insert, text="return", command= lambda:select_attendance_window(win_leave_insert))\
  1029.         .place(x=300, y=250)
  1030.  
  1031. def insert_attendance(old_page, name, place, date):
  1032.     employee_id = 0
  1033.     selectsql_attendance = select([attendance_table])
  1034.     result = conn.execute(selectsql_attendance)
  1035.  
  1036.     selectsql_employee_id_by_name = select([employee_table]).where(employee_table.c.name == name)
  1037.     result_employee = conn.execute(selectsql_employee_id_by_name)
  1038.     for employee in result_employee:
  1039.         employee_id = employee[0]
  1040.     id = 1
  1041.     if employee_id:
  1042.         for row in result:
  1043.             if  not row[0] < id:
  1044.                 id = row[0]+1
  1045.         ins = attendance_table.insert().values(
  1046.             id= id,
  1047.             employee_id = employee_id,
  1048.             place = place,
  1049.             date = date,
  1050.         )
  1051.         conn.execute(ins)
  1052.     else:
  1053.         messagebox.showerror(message='Error, your employee is wrong, try again.')
  1054.     select_attendance_window(old_page)
  1055.  
  1056. def edit_attendance(old_page, name, place, date, input_id):
  1057.     employee_id = 0
  1058.     selectsql_employee_id_by_name = select([employee_table]).where(employee_table.c.name == name)
  1059.     result_employee = conn.execute(selectsql_employee_id_by_name)
  1060.     for employee in result_employee:
  1061.         employee_id = employee[0]
  1062.     if employee_id:
  1063.         editsql_attendance = attendance_table.update().where(attendance_table.c.id == input_id).values(
  1064.             employee_id = employee_id,
  1065.             place = place,
  1066.             date = date
  1067.         )
  1068.         conn.execute(editsql_attendance)
  1069.     else:
  1070.         messagebox.showerror(message='Error, your employee is wrong, try again.')
  1071.     select_attendance_window(old_page)
  1072.  
  1073. def delete_attendance(old_page, input_id):
  1074.     deletesql_leave = attendance_table.delete().where(attendance_table.c.id == input_id)
  1075.     conn.execute(deletesql_leave)
  1076.     select_attendance_window(old_page)
  1077. #
  1078.  
  1079. def select_purchase_window(old_page):
  1080.     LABEL_YPIXEL = 20
  1081.     PRODUCT_XPIXEL = 0
  1082.     TIME_XPIXEL = 80
  1083.     COUNT_XPIXEL = 160
  1084.     MANUFACTURES_XPIXEL = 240
  1085.     EDIT_XPIXEL = 480
  1086.     DELETE_XPIXEL = 530
  1087.     line = 0
  1088.  
  1089.     old_page.destroy()
  1090.     win_purchase = tk.Tk()
  1091.     win_purchase.title("purchase")
  1092.     win_purchase.geometry('600x400')
  1093.  
  1094.     label_Lusername = tk.Label(win_purchase, text="User Name:").place(x=0, y=0)
  1095.     label_username = tk.Label(win_purchase, text=G_user_name).place(x=80, y=0)
  1096.     label_Lproduct = tk.Label(win_purchase, text="Product").place(x=PRODUCT_XPIXEL, y=LABEL_YPIXEL)
  1097.     label_Ltime = tk.Label(win_purchase, text="Time").place(x=TIME_XPIXEL, y=LABEL_YPIXEL)
  1098.     label_Lcount = tk.Label(win_purchase, text="Count").place(x=COUNT_XPIXEL, y=LABEL_YPIXEL)
  1099.     label_Lmanafacture = tk.Label(win_purchase, text="Manufactures").place(x=MANUFACTURES_XPIXEL, y=LABEL_YPIXEL)
  1100.     btn_new_object = tk.Button(win_purchase, text='Insert', command=lambda: purchase_insert_window(win_purchase)).pack(
  1101.         side="bottom")
  1102.     btn_open_main = tk.Button(win_purchase, text='return', command=lambda:open_main_window(win_purchase)).pack(
  1103.         side="bottom")
  1104.  
  1105.     selectsql_purchase = select([purchase_table])
  1106.     result = conn.execute(selectsql_purchase)
  1107.  
  1108.     for row in result:
  1109.         selectsql_product_by_product_id = select([product_table]).where(product_table.c.id == row[1])
  1110.         result_product_name = conn.execute(selectsql_product_by_product_id)
  1111.         product_name = ''
  1112.         for name in result_product_name:
  1113.             product_name = name[1]
  1114.  
  1115.         label_pur_name = tk.Label(win_purchase, text=product_name).place(x=PRODUCT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1116.         label_pur_stock = tk.Label(win_purchase, text=row[2]).place(x=TIME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1117.         label_pur_price = tk.Label(win_purchase, text=row[3]).place(x=COUNT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1118.         label_pur_purchase = tk.Label(win_purchase, text=row[4]).place(x=MANUFACTURES_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1119.  
  1120.         btn_delete_pur = tk.Button(win_purchase, text='delete', command=partial(delete_purchase, win_purchase, row[0])) \
  1121.             .place(x=DELETE_XPIXEL, y=LABEL_YPIXEL + (line + 1) * 30)
  1122.         line+=1
  1123.  
  1124. def purchase_insert_window(old_page):
  1125.     old_page.destroy()
  1126.     win_purchase_insert = tk.Tk()
  1127.     win_purchase_insert.title("Insert product")
  1128.     win_purchase_insert.geometry('450x300')
  1129.  
  1130.     label_Lname = tk.Label(win_purchase_insert, text="Product").grid(column=0, row=0)
  1131.     entry_name = tk.Entry(win_purchase_insert)
  1132.     entry_name.grid(column=1, row=0)
  1133.     label_Lstock = tk.Label(win_purchase_insert, text="Time").grid(column=0, row=1)
  1134.     entry_stock = tk.Entry(win_purchase_insert)
  1135.     entry_stock.grid(column=1, row=1)
  1136.     label_Lprice = tk.Label(win_purchase_insert, text="Count").grid(column=0, row=2)
  1137.     entry_price = tk.Entry(win_purchase_insert)
  1138.     entry_price.grid(column=1, row=2)
  1139.     label_Lpurchase = tk.Label(win_purchase_insert, text="Manufactures").grid(column=0, row=3)
  1140.     entry_purchase = tk.Entry(win_purchase_insert)
  1141.     entry_purchase.grid(column=1, row=3)
  1142.  
  1143.     btn_insert = tk.Button(win_purchase_insert, text="insert", command= lambda:insert_purchase(win_purchase_insert,
  1144.         entry_name.get(), entry_stock.get(), entry_price.get(), entry_purchase.get())).place(x=200, y=250)
  1145.     btn_return = tk.Button(win_purchase_insert, text="return", command= lambda:select_purchase_window(win_purchase_insert))\
  1146.         .place(x=300, y=250)
  1147.  
  1148. def insert_purchase(old_page, product, time, count, manufactures):
  1149.     print('\nproduct:', product)
  1150.     selectsql_purchase = select([purchase_table])
  1151.     result = conn.execute(selectsql_purchase)
  1152.  
  1153.     product_id = 0
  1154.     selectsql_product_by_product_id = select([product_table]).where(product_table.c.name == product)
  1155.     result_product_id = conn.execute(selectsql_product_by_product_id)
  1156.     for row in result_product_id:
  1157.         product_id = row[0]
  1158.  
  1159.     id = 0
  1160.     for row in result:
  1161.         if not row[0] < id:
  1162.             id = row[0] + 1
  1163.  
  1164.     if product_id:
  1165.         ins = purchase_table.insert().values(
  1166.             id= id,
  1167.             product_id = product_id,
  1168.             time= time,
  1169.             count = count,
  1170.             Manufacturers = manufactures
  1171.             )
  1172.         conn.execute(ins)
  1173.  
  1174.         edit_stock(product_id, count, 1)
  1175.     else:
  1176.         messagebox.showerror(message='Error, the product is not exist, try again.')
  1177.         pass
  1178.     select_purchase_window(old_page)
  1179.  
  1180. def delete_purchase(old_page, input_id):
  1181.     selectsql_purchase = purchase_table.select().where(purchase_table.c.id == input_id)
  1182.     result_purchase = conn.execute(selectsql_purchase)
  1183.  
  1184.     purchase_product_id = 0
  1185.     purchase_count = 0
  1186.     for row in result_purchase:
  1187.         purchase_product_id = row[1]
  1188.         purchase_count = row[3]
  1189.         print('purchase_product_id:',purchase_product_id)
  1190.         print('purchase_count:', purchase_count)
  1191.     edit_stock(purchase_product_id, purchase_count, 0)
  1192.  
  1193.     deletesql_purchase = purchase_table.delete().where(purchase_table.c.id == input_id)
  1194.     conn.execute(deletesql_purchase)
  1195.     select_purchase_window(old_page)
  1196.  
  1197.  
  1198. def select_stock_window(old_page):
  1199.     LABEL_YPIXEL = 20
  1200.     NAME_XPIXEL = 0
  1201.     STOCK_XPIXEL = 100
  1202.  
  1203.     line = 0
  1204.     global product_data
  1205.     old_page.destroy()
  1206.     win_stock = tk.Tk()
  1207.     win_stock.title("stock")
  1208.     win_stock.geometry('600x400')
  1209.  
  1210.     label_Lusername = tk.Label(win_stock, text="User Name:").place(x=0, y=0)
  1211.     label_username = tk.Label(win_stock, text=G_user_name).place(x=80, y=0)
  1212.     label_Lproductname = tk.Label(win_stock, text="Product").place(x=NAME_XPIXEL, y=LABEL_YPIXEL)
  1213.     label_Lcount = tk.Label(win_stock, text="Count").place(x=STOCK_XPIXEL, y=LABEL_YPIXEL)
  1214.  
  1215.     btn_open_main = tk.Button(win_stock, text='return', command=lambda:open_main_window(win_stock)).pack(
  1216.         side="bottom")
  1217.  
  1218.     selectsql_stock = select([stock_table])
  1219.     result = conn.execute(selectsql_stock)
  1220.  
  1221.     for row in result:
  1222.         product_id = row[1]
  1223.         product_name = ''
  1224.         selectsql_name_by_product_id = select([product_table]).where(product_table.c.id == product_id)
  1225.         result_product_id = conn.execute(selectsql_name_by_product_id)
  1226.         for id in result_product_id:
  1227.             product_name = id[1]
  1228.         label_stk_name = tk.Label(win_stock, text=product_name).place(x=NAME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1229.         label_stk_count = tk.Label(win_stock, text=row[2]).place(x=STOCK_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1230.  
  1231.         line+=1
  1232.  
  1233. def edit_stock(product_id, count, add):
  1234.     # print('\nedit stock\n')
  1235.     if add:
  1236.         # print('\nadd \n')
  1237.         product_exist = 0
  1238.         selectsql_stock_table = select([stock_table])
  1239.         result_stock_table = conn.execute(selectsql_stock_table)
  1240.         id = 0
  1241.         pre_count = 0
  1242.         for row in result_stock_table:
  1243.             if product_id == row[1]:
  1244.                 product_exist = 1
  1245.                 pre_count = row[2]
  1246.             if not row[0] < id:
  1247.                 id = row[0] + 1
  1248.  
  1249.         if product_exist:
  1250.             upd = stock_table.update().where(stock_table.c.product_id == product_id).values(
  1251.                 count= int(pre_count)+int(count)
  1252.             )
  1253.             conn.execute(upd)
  1254.         else:
  1255.             ins = stock_table.insert().values(
  1256.                 product_id=product_id,
  1257.                 count=count
  1258.             )
  1259.             conn.execute(ins)
  1260.     else:
  1261.         selectsql_stock_table = select([stock_table])
  1262.         result_stock_table = conn.execute(selectsql_stock_table)
  1263.         pre_count = 0
  1264.         for row in result_stock_table:
  1265.             if product_id == row[1]:
  1266.                 pre_count = row[2]
  1267.         upd = stock_table.update().where(stock_table.c.product_id == product_id).values(
  1268.             count=int(pre_count) - int(count)
  1269.         )
  1270.         conn.execute(upd)
  1271.         pass
  1272.  
  1273.  
  1274. def select_returns_window(old_page):
  1275.     LABEL_YPIXEL = 20
  1276.     PRODUCT_XPIXEL = 0
  1277.     TIME_XPIXEL = 80
  1278.     COUNT_XPIXEL = 160
  1279.     MONEY_XPIXEL = 240
  1280.     MANUFACTURES_XPIXEL = 300
  1281.  
  1282.     DELETE_XPIXEL = 530
  1283.     line = 0
  1284.  
  1285.     old_page.destroy()
  1286.     win_returns = tk.Tk()
  1287.     win_returns.title("returns")
  1288.     win_returns.geometry('600x400')
  1289.  
  1290.     label_Lusername = tk.Label(win_returns, text="User Name:").place(x=0, y=0)
  1291.     label_username = tk.Label(win_returns, text=G_user_name).place(x=80, y=0)
  1292.     label_Lproduct = tk.Label(win_returns, text="Product").place(x=PRODUCT_XPIXEL, y=LABEL_YPIXEL)
  1293.     label_Ltime = tk.Label(win_returns, text="Time").place(x=TIME_XPIXEL, y=LABEL_YPIXEL)
  1294.     label_Lcount = tk.Label(win_returns, text="Count").place(x=COUNT_XPIXEL, y=LABEL_YPIXEL)
  1295.     label_Lmoney = tk.Label(win_returns, text="Money").place(x=MONEY_XPIXEL, y=LABEL_YPIXEL)
  1296.     label_Lmanafacture = tk.Label(win_returns, text="Manufactures").place(x=MANUFACTURES_XPIXEL, y=LABEL_YPIXEL)
  1297.     btn_new_object = tk.Button(win_returns, text='Insert', command=lambda: returns_insert_window(win_returns)).pack(
  1298.         side="bottom")
  1299.     btn_open_main = tk.Button(win_returns, text='return', command=lambda:open_main_window(win_returns)).pack(
  1300.         side="bottom")
  1301.  
  1302.     selectsql_returns = select([returns_table])
  1303.     result = conn.execute(selectsql_returns)
  1304.  
  1305.     for row in result:
  1306.         selectsql_product_by_product_id = select([product_table]).where(product_table.c.id == row[1])
  1307.         result_product_name = conn.execute(selectsql_product_by_product_id)
  1308.         product_name = ''
  1309.         for name in result_product_name:
  1310.             product_name = name[1]
  1311.  
  1312.         label_pur_name = tk.Label(win_returns, text=product_name).place(x=PRODUCT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1313.         label_pur_stock = tk.Label(win_returns, text=row[2]).place(x=TIME_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1314.         label_pur_price = tk.Label(win_returns, text=row[3]).place(x=COUNT_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1315.         label_pur_purchase = tk.Label(win_returns, text=row[4]).place(x=MONEY_XPIXEL, y=LABEL_YPIXEL+(line+1)*30)
  1316.         label_pur_manafacture  = tk.Label(win_returns, text=row[4]).place(x=MANUFACTURES_XPIXEL, y=LABEL_YPIXEL+(line+1) * 30)
  1317.         btn_delete_pur = tk.Button(win_returns, text='delete', command=partial(delete_returns, win_returns, row[0])) \
  1318.             .place(x=DELETE_XPIXEL, y=LABEL_YPIXEL + (line + 1) * 30)
  1319.         line+=1
  1320.  
  1321. def returns_insert_window(old_page):
  1322.     old_page.destroy()
  1323.     win_returns_insert = tk.Tk()
  1324.     win_returns_insert.title("Insert returns")
  1325.     win_returns_insert.geometry('450x300')
  1326.  
  1327.     label_Lname = tk.Label(win_returns_insert, text="Product").grid(column=0, row=0)
  1328.     entry_name = tk.Entry(win_returns_insert)
  1329.     entry_name.grid(column=1, row=0)
  1330.     label_Lstock = tk.Label(win_returns_insert, text="Time").grid(column=0, row=1)
  1331.     entry_stock = tk.Entry(win_returns_insert)
  1332.     entry_stock.grid(column=1, row=1)
  1333.     label_Lprice = tk.Label(win_returns_insert, text="Count").grid(column=0, row=2)
  1334.     entry_price = tk.Entry(win_returns_insert)
  1335.     entry_price.grid(column=1, row=2)
  1336.     label_Lpurchase = tk.Label(win_returns_insert, text="Manufactures").grid(column=0, row=3)
  1337.     entry_purchase = tk.Entry(win_returns_insert)
  1338.     entry_purchase.grid(column=1, row=3)
  1339.  
  1340.     btn_insert = tk.Button(win_returns_insert, text="insert", command= lambda:insert_returns(win_returns_insert,
  1341.         entry_name.get(), entry_stock.get(), entry_price.get(), entry_purchase.get())).place(x=200, y=250)
  1342.     btn_return = tk.Button(win_returns_insert, text="return", command= lambda:select_returns_window(win_returns_insert))\
  1343.         .place(x=300, y=250)
  1344.  
  1345. def insert_returns(old_page, product, time, count, manufactures):
  1346.     print('\nproduct:', product)
  1347.     selectsql_returns = select([returns_table])
  1348.     result = conn.execute(selectsql_returns)
  1349.  
  1350.     product_id = 0
  1351.     product_price = 0
  1352.     stock_count = 0
  1353.     selectsql_product_by_product_name = select([product_table]).where(product_table.c.name == product)
  1354.     result_product_id = conn.execute(selectsql_product_by_product_name)
  1355.     for row in result_product_id:
  1356.         product_id = row[0]
  1357.         product_price = row[2]
  1358.     selectsql_stock_by_product_id = select([stock_table]).where(stock_table.c.product_id == product_id)
  1359.     result_stock = conn.execute(selectsql_stock_by_product_id)
  1360.     for row in result_stock:
  1361.         stock_count = row[2]
  1362.     id = 0
  1363.     for row in result:
  1364.         if not row[0] < id:
  1365.             id = row[0] + 1
  1366.  
  1367.     if product_id:
  1368.         if int(stock_count) > int(count):
  1369.             ins = returns_table.insert().values(
  1370.                 id= id,
  1371.                 product_id = product_id,
  1372.                 time= time,
  1373.                 count = count,
  1374.                 money = (int(product_price) * int(count)),
  1375.                 Manufacturers = manufactures
  1376.                 )
  1377.             conn.execute(ins)
  1378.  
  1379.             edit_stock(product_id, count, 0)
  1380.         else:
  1381.             messagebox.showerror(message='Error, the stock count is not enough, try again.')
  1382.     else:
  1383.         messagebox.showerror(message='Error, the product is not exist, try again.')
  1384.         pass
  1385.     select_returns_window(old_page)
  1386.  
  1387. def delete_returns(old_page, input_id):
  1388.     selectsql_returns = returns_table.select().where(returns_table.c.id == input_id)
  1389.     result_returns = conn.execute(selectsql_returns)
  1390.  
  1391.     returns_product_id = 0
  1392.     returns_count = 0
  1393.     for row in result_returns:
  1394.         returns_product_id = row[1]
  1395.         returns_count = -row[3]
  1396.  
  1397.     edit_stock(returns_product_id, returns_count, 0)
  1398.     deletesql_returns = returns_table.delete().where(returns_table.c.id == input_id)
  1399.     conn.execute(deletesql_returns)
  1400.     select_returns_window(old_page)
  1401.  
  1402.  
  1403.  
  1404.  
  1405. def usr_login(usr_name, usr_pwd):
  1406.     global win_login
  1407.     global G_user_name
  1408.  
  1409.     if usr_name in user_Info:
  1410.         if usr_pwd == user_Info[usr_name]:
  1411.             G_user_name = usr_name
  1412.             messagebox.showinfo(title='Welcome', message='How are you?' + usr_name)
  1413.             open_main_window(win_login)
  1414.         else:
  1415.             messagebox.showerror(message='Error, your password is wrong, try again.')
  1416.     else:
  1417.         messagebox.askyesno('Welcome','You have not sign up yet. Sign up today?')
  1418.  
  1419. def login_frame():
  1420.     global var_account
  1421.     global var_password
  1422.     global win_login
  1423.     win_login = tk.Tk()
  1424.     win_login.title("Log in")
  1425.     var_account = tk.StringVar()
  1426.     var_password = tk.StringVar()
  1427.  
  1428.     label=tk.Label(win_login, text="Log in!")
  1429.     label_account=tk.Label(win_login, text="account")
  1430.     label_password=tk.Label(win_login, text="password")
  1431.     entry_account=tk.Entry(win_login)
  1432.     entry_password=tk.Entry(win_login, show='*')
  1433.     btn_login=tk.Button(win_login, text="Log in", command=lambda :usr_login(entry_account.get(), entry_password.get()))
  1434.     label.grid(column=0,row=0)
  1435.  
  1436.  
  1437.     label_account.grid(column=0,row =ACCOUNTROW)
  1438.     entry_account.grid(column=1,row =ACCOUNTROW)
  1439.     label_password.grid(column=0,row =PASSWORDROW)
  1440.     entry_password.grid(column=1,row =PASSWORDROW)
  1441.     btn_login.grid(row = btnLOGINROW)
  1442.  
  1443.     win_login.mainloop()
  1444.  
  1445. login_frame()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement