Esempio n. 1
0
    def test_dateentry_functions(self):
        widget = DateEntry(self.window,
                           width=12,
                           background='darkblue',
                           foreground='white',
                           borderwidth=2)
        widget.pack()
        self.window.update()

        widget.set_date(format_date(date(2018, 12, 31), 'short'))
        self.assertEqual(widget.get_date(), date(2018, 12, 31))
        with self.assertRaises(ValueError):
            widget.set_date("ab")
        widget.set_date(date(2015, 12, 31))
        self.assertEqual(widget.get_date(), date(2015, 12, 31))
        self.assertEqual(widget.get(), format_date(date(2015, 12, 31),
                                                   'short'))

        widget.delete(0, "end")
        widget.insert(0, "abc")
        self.window.focus_force()
        self.assertEqual(widget.get_date(), date(2015, 12, 31))

        widget._on_motion(TestEvent(x=10, y=20))
        widget._on_b1_press(TestEvent(x=10, y=20))
        widget._on_b1_press(TestEvent(x=widget.winfo_width() - 2, y=2))
        widget._on_focus_out_cal(TestEvent(x=10, y=20))

        widget.state(("disabled", ))
        self.window.update()
        self.assertIn("disabled", widget.state())

        widget.drop_down()
        self.window.update()
        widget._select()
        self.window.update()
        widget.drop_down()
        self.window.update()
        widget.drop_down()
        self.window.update()

        widget.configure(state='readonly')
        self.window.update()
        widget._select()
        self.assertIn('readonly', widget.state())
Esempio n. 2
0
File: gui.py Progetto: vshyshkin/pwr
    def create_datepicker(self, label, filter_key, column):
        tk.Label(self, text=label).grid(row=0, column=column, sticky="W")

        container = tk.Frame(self)

        date_picker = DateEntry(container, date_pattern=Filters.DATE_PATTERN)
        date_picker.config(validate='none')
        date_picker.bind('<<DateEntrySelected>>',
                         self.on_date_pick(filter_key))
        date_picker.delete(0, tk.END)
        date_picker.grid(row=0, column=0)

        clear_btn = tk.Button(
            container,
            text="x",
            command=self.on_clear_date_click(date_picker, filter_key),
        )
        clear_btn.grid(row=0, column=1, sticky="N")

        container.grid(row=1, column=column)
Esempio n. 3
0
def edit_task(task):
    task_id = int(re.match(r"{'id': (?P<id>\d+)", task).groupdict()['id'])
    with open('db.txt', 'r+') as file:
        all_tasks = json.load(file)
        selected = list(filter(lambda x: x['id'] == task_id, all_tasks))[0]
    clear_view(tk)
    Label(tk, text="Enter your task name: ").grid(row=0, column=0, padx=20, pady=20)
    name = Entry(tk)
    name.delete(0, END)
    name.insert(0, selected['name'])
    name.grid(row=0, column=1, padx=20, pady=20)
    Label(tk, text="Due date: ").grid(row=1, column=0, padx=20, pady=20)
    date = DateEntry(tk)
    date.delete(0, END)
    date.insert(0, selected['date'])
    date.grid(row=1, column=1, padx=20, pady=20)
    Label(tk, text="Description: ").grid(row=2, column=0, padx=20, pady=20)
    description = ScrolledText(tk, width=20, height=10)
    description.insert(INSERT, selected['description'])
    description.insert(END, "")
    description.grid(row=2, column=1, padx=20, pady=20)
    Label(tk, text=f"Select priority, current is {mapper[selected['priority']] if selected['priority'] else None}").grid(row=3, column=0, padx=20, pady=20)
    s = IntVar()
    rad1 = Radiobutton(tk, text='Low', value=1, variable=s)
    rad2 = Radiobutton(tk, text='Medium', value=2, variable=s)
    rad3 = Radiobutton(tk, text='High', value=3, variable=s)

    rad1.grid(column=1, row=3)
    rad2.grid(column=2, row=3)
    rad3.grid(column=3, row=3)
    Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20)
    Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20)
    chk_state = BooleanVar()
    chk_state.set(selected["is_completed"])  # set check state
    chk = Checkbutton(tk, text='Choose', var=chk_state)
    chk.grid(column=1, row=4)

    Button(tk, text="Edit task", bg="yellow", fg="black", command=lambda: triger_edit(tk, selected, all_tasks, [name.get(), date.get(), description.get("1.0", END), s.get(), chk_state.get()])).grid(row=5, column=0)
    Button(tk, text="Cancel", bg="black", fg="white", command=lambda: main_view(tk)).grid(row=5, column=1, padx=100, pady=100)
Esempio n. 4
0
def edit_task_view(tk, task):
    if task:
        task = get_task(task)
        clear_view(tk)
        task = task
        get_all_tasks()
        index = get_all_tasks().index(task)

        # window configuration
        tk.geometry("500x500")
        tk.title("Edit task")
        Label(tk, text="Enter your task name:").grid(row=0, column=0, padx=15, pady=25)
        name = Entry(tk, width=30)
        name.grid(row=0, column=1)
        name.insert(0, task['name'])  # gets the name of the task and inserts it

        # date selector
        Label(tk, text="Due date:").grid(row=1, column=0, pady=25)
        date = DateEntry(tk)
        date.grid(row=1, column=1)
        date.delete(0, END)
        date.insert(0, task['date'])  # gets the selected date and inserts it

        # description
        Label(tk, text="Description:").grid(row=2, column=0, pady=25)
        description = Text(tk, width=25, height=10)
        description.grid(row=2, column=1)
        description.insert(INSERT, task['description'])  # gets description from the given task and insert it

        # priority
        Label(tk, text="Select priority:").grid(row=3, column=0, pady=25)
        priority = IntVar()
        current_priority = task['priority']  # gets what priority was selected

        # radio buttons for priority
        rb1 = Radiobutton(tk, text="Low", value=1, variable=priority)
        rb2 = Radiobutton(tk, text="Medium", value=2, variable=priority)
        rb3 = Radiobutton(tk, text="High", value=3, variable=priority)

        if current_priority == 1:  # selects low priority if current_priority is low
            rb1.select()

        elif current_priority == 2:  # selects low priority if current_priority is medium
            rb2.select()

        else:
            rb3.select()  # selects low priority if current_priority is high

        rb1.grid(row=3, column=1)
        rb2.grid(row=3, column=2)
        rb3.grid(row=3, column=3)

        # is completed check button
        Label(tk, text="Check if completed:").grid(row=4, column=0, pady=25)
        is_completed = BooleanVar()
        is_completed.set(task['is_completed'])  # gets info - is_completed from the task and marks the button if it is
        Checkbutton(tk, text="Choose", variable=is_completed).grid(row=4, column=1)

        Button(tk, text="Edit task", bg="yellow",
               command=lambda: edit_task(name=name.get(), date=date.get(), description=description.get('1.0', END),
                                         priority=priority.get(), is_completed=is_completed.get(), index=index)) \
            .grid(row=5, column=0, pady=15)
        Button(tk, text="Cancel", bg="black", fg="white", command=lambda: view_tasks(tk)).grid(row=5, column=1)

    else:
        messagebox.showinfo("Error", "Please select a task!")
Esempio n. 5
0
class checkout:
    def __init__(self, frame):
        self.mywindow = Toplevel(frame)
        self.mywindow.wm_title("Check Out")
        self.mywindow.geometry("800x300")

        t1 = Label(self.mywindow, text="Customer ID ")
        t2 = Label(self.mywindow, text="Customer Name ")
        t3 = Label(self.mywindow, text="Date of Check In ")
        t4 = Label(self.mywindow, text="Date of Check Out ")
        t5 = Label(self.mywindow, text="Resturant Balance ")
        t6 = Label(self.mywindow, text="Room Rent ")
        t7 = Label(self.mywindow, text="Mode of Payemt ")
        t8 = Label(self.mywindow, text="Advance Received ")
        t9 = Label(self.mywindow, text="Total Payable Amount ")

        self.e1 = Entry(self.mywindow)  #Customer id
        self.e2 = Entry(self.mywindow)  #Customer Name
        self.e3 = DateEntry(self.mywindow)  #d Check in
        self.e4 = DateEntry(self.mywindow)  #d check out
        self.e5 = Entry(self.mywindow)  #resturant bill
        self.e6 = Entry(self.mywindow)  # room bill
        self.e7 = Entry(self.mywindow)  # Adv payment
        self.e8 = Entry(self.mywindow)  # payable amt
        self.mop = StringVar()
        self.c1 = ttk.Combobox(self.mywindow,
                               values=("Cash", "Cheque", "Debit Card",
                                       "Paytm"),
                               textvariable=self.mop,
                               state="readonly")
        self.c1.set(" Mode Of Payment")
        t1.place(x=50, y=50)
        t2.place(x=350, y=50)
        t3.place(x=50, y=80)
        t4.place(x=350, y=80)
        t5.place(x=50, y=110)
        t6.place(x=350, y=110)
        t7.place(x=50, y=140)
        t8.place(x=350, y=140)

        self.e1.place(x=180, y=50)
        self.e2.place(x=500, y=50)
        self.e3.place(x=180, y=80)
        self.e4.place(x=500, y=80)
        self.e5.place(x=180, y=110)
        self.e6.place(x=500, y=110)
        self.c1.place(x=180, y=140)
        self.e7.place(x=500, y=140)

        self.frame()
        self.e1.bind("<FocusIn>", lambda e: self.foucsin())
        self.e1.bind("<FocusOut>", lambda e: self.getcustomerdetails())
        self.c1.bind("<<ComboboxSelected>>", lambda e: self.get_items())

    def get_items(self):
        # print(self.mop.get())
        self.totalpayableamt = (float(self.e5.get()) +
                                float(self.e6.get())) - float(self.e7.get())
        if self.mop.get() in ("Debit Card", "Paytm"):
            disscount = self.totalpayableamt * 0.15
            self.totalpayableamt -= disscount
            # print(str(totalpayableamt))

        if self.mop.get() not in ("Debit Card", "Paytm"):
            print(str(self.totalpayableamt))
        self.ttlamtframe()

    def getcustomerdetails(self):
        try:

            mydb = pymysql.connect(host='localhost',
                                   user='******',
                                   password='',
                                   db='hotelmanagementdb')
            with mydb.cursor() as myconn:
                myroomhistory = []
                myconn.execute(
                    "select room_type,customer_name,check_in,check_out,advance_payment,room_no,price_per_day from room_history where customer_id=%s",
                    (self.e1.get()))
                mydb.commit()
                myroomhistory = myconn.fetchone()
                # print(type(myroomhistory))
                # print(myroomhistory)
                self.roomtype = myroomhistory[0]
                self.e2.insert(0, myroomhistory[1])
                self.e3.set_date(myroomhistory[2])
                self.e4.set_date(myroomhistory[3])
                self.e7.insert(0, myroomhistory[4])
                self.myroomno = myroomhistory[5]
                self.myroomprice = myroomhistory[6]
                # print("Room rent: "+str(int(self.myroomprice)))
                self.calcroomrent()
                del myroomhistory
                myconn.execute(
                    "select payable_amt from resturant_acc where customer_id=%s",
                    (self.e1.get()))
                mydb.commit()
                myroomhistory = myconn.fetchone()
                print(type(myroomhistory))
                print(myroomhistory)
                if myroomhistory is None:
                    self.e5.insert(0, 0)
                else:
                    self.e5.insert(0, myroomhistory[0])
                self.e2.config(state="readonly")
                self.e3.config(state="readonly")
                self.e5.config(state="readonly")
                self.e7.config(state="readonly")

        except Exception as e:
            messagebox.showerror("DataBase Error ",
                                 "Error Occured Due to : " + str(e))

    def update_room_status(self):
        try:

            mydb = pymysql.connect(host='localhost',
                                   user='******',
                                   password='',
                                   db='hotelmanagementdb')
            with mydb.cursor() as myconn:
                myconn.execute(
                    "update room set status=%s where room_no=%s and  room_type=%s",
                    ("Available", self.myroomno, self.roomtype))
                mydb.commit()
        except Exception as e:
            messagebox.showerror("DataBase Error ",
                                 "Error Occured Due to : " + str(e))

    def update_customer_status(self):
        try:
            mydb = pymysql.connect(host='localhost',
                                   user='******',
                                   password='',
                                   db='hotelmanagementdb')
            with mydb.cursor() as mycon:
                mycon.execute(
                    "update customer set status=%s where customer_id=%s",
                    ("out", self.e1.get()))
                mydb.commit()

        except Exception as e:
            messagebox.showerror("Database Error",
                                 "Error Occured Due to " + str(e))

    def calcroomrent(self):
        roomrent = 0
        dayz = self.e4.get_date() - self.e3.get_date()
        stayday = str(dayz)
        index = stayday.find("day")
        # print(type(stayday))
        # print("Stay days : "+stayday)
        # print("Days : "+stayday[0:index])
        # print(self.roomtype)
        # print(self.myroomprice)
        # roomrent=int(stayday[0:index-1])*(int(self.myroomprice))
        print("Room rent : " + str(int(self.myroomprice)))
        self.e6.insert(0, str((int(self.myroomprice))))
        if self.roomtype == "Double":
            roomrent = int(stayday[0:index - 1]) * self.myroomprice
            self.e6.insert(0, str(roomrent))
        # if self.roomtype == "Triple":
        #     roomrent = int(stayday[0:index - 1]) * 750
        #     self.e6.insert(0, str(roomrent))
        # if self.roomtype == "Quad":
        #     roomrent = int(stayday[0:index - 1]) * 800
        #     self.e6.insert(0, str(roomrent))
        self.e6.config(state="readonly")

    def frame(self):
        note = Frame(self.mywindow, border=2, relief=RAISED)
        t1 = Label(
            note,
            text=
            "get 15% discount on Every Transaction with Debit Card / Paytm",
            font=(32))
        t1.pack()
        note.place(x=180, y=250)

    def ttlamtframe(self):
        self.note = Frame(self.mywindow, border=5, relief=RAISED)
        t1 = Label(self.note,
                   text="Total Payable Amount is : ₹ " +
                   str(self.totalpayableamt),
                   font=(28))
        t1.pack()
        self.note.place(x=250, y=180)

        self.note.bind("<Enter>", lambda e: self.enter(self.note))
        self.note.bind("<Leave>", lambda e: self.leave(self.note))
        t1.bind("<Button-1>", lambda e: self.billpaid())

    def billpaid(self):
        try:
            billingdate = ("{}/{}/{}".format(datetime.datetime.now().year,
                                             datetime.datetime.now().month,
                                             datetime.datetime.now().day))
            mydb = pymysql.connect(host='localhost',
                                   user='******',
                                   password='',
                                   db='hotelmanagementdb')
            with mydb.cursor() as myconn:
                myconn.execute(
                    "insert into billpaid (customer_id,customer_name,date_of_payment,amt_pay) values (%s,%s,%s,%s)",
                    (self.e1.get(), self.e2.get(), billingdate,
                     str(self.totalpayableamt)))
                mydb.commit()
                self.clear_rec()
                messagebox.showinfo("Bill Payment",
                                    "Thank You \n Visit Again ",
                                    parent=self.mywindow)
                self.update_room_status()
                self.update_customer_status()

        except Exception as e:
            messagebox.showinfo("Database Error ",
                                "Occured due to " + str(e),
                                parent=self.mywindow)
        self.clear()

    def enter(event, obj):
        obj.config(bg="Blue")

    def leave(event, obj):
        obj.config(bg="red")

    def foucsin(self):
        print("in")

        self.e2.config(state="normal")
        self.e3.config(state="normal")
        self.e4.config(state="normal")
        self.e5.config(state="normal")
        self.e6.config(state="normal")
        self.e7.config(state="normal")

        self.e2.delete(0, END)
        self.e3.delete(0, END)
        self.e4.delete(0, END)
        self.e5.delete(0, END)
        self.e6.delete(0, END)
        self.e7.delete(0, END)
        self.c1.set("Mode Of Payment")

    def clear_rec(self):
        try:
            mydb = pymysql.connect(host='localhost',
                                   user='******',
                                   password='',
                                   db='hotelmanagementdb')
            with mydb.cursor() as myconn:
                myconn.execute("delete from room_history where customer_id=%s",
                               (self.e1.get()))
                myconn.execute(
                    "delete from resturant_acc where customer_id=%s",
                    (self.e1.get()))
                mydb.commit()

        except Exception as e:
            messagebox.showerror("DataBase Error",
                                 "Error occured due to : " + str(e))

    def clear(self):
        self.e2.config(state="normal")
        self.e3.config(state="normal")
        self.e4.config(state="normal")
        self.e5.config(state="normal")
        self.e6.config(state="normal")
        self.e7.config(state="normal")

        self.e1.delete(0, END)
        self.e2.delete(0, END)
        self.e3.delete(0, END)
        self.e4.delete(0, END)
        self.e5.delete(0, END)
        self.e6.delete(0, END)
        self.e7.delete(0, END)
        self.c1.set("Mode Of Payment")
Esempio n. 6
0
class CashierRegistration:
    def __init__(self, master, *args, **kwargs):

        self.master = master
        self.heading = Label(master,
                             text="Manage Cashier Details",
                             font=("arial 30 bold"),
                             fg="steelblue")
        self.heading.place(x=50, y=10)

        # labals and entries
        self.labal_cashier_id = Label(master,
                                      text="Cashier Id",
                                      font=("arial 15 bold"))
        self.labal_cashier_id.place(x=50, y=70)
        self.entry_cashier_id = Entry(master, width=20, font=("arial 15 bold"))
        self.entry_cashier_id.place(x=250, y=70)

        self.labal_cashier_name = Label(master,
                                        text="Cashier Name",
                                        font=("arial 15 bold"))
        self.labal_cashier_name.place(x=50, y=120)
        self.entry_cashier_name = Entry(master,
                                        width=20,
                                        font=("arial 15 bold"))
        self.entry_cashier_name.place(x=250, y=120)

        self.labal_cashier_username = Label(master,
                                            text="Cashier Username",
                                            font=("arial 15 bold"))
        self.labal_cashier_username.place(x=50, y=170)
        self.entry_cashier_username = Entry(master,
                                            width=20,
                                            font=("arial 15 bold"))
        self.entry_cashier_username.place(x=250, y=170)

        self.labal_cashier_password = Label(master,
                                            text="Cashier Password",
                                            font=("arial 15 bold"))
        self.labal_cashier_password.place(x=50, y=220)
        self.entry_cashier_password = Entry(master,
                                            width=20,
                                            font=("arial 15 bold"))
        self.entry_cashier_password.place(x=250, y=220)

        self.labal_cashier_dob = Label(master,
                                       text="Cashier DoB:",
                                       font=("arial 15 bold"))
        self.labal_cashier_dob.place(x=50, y=270)
        self.entry_cashier_dob = DateEntry(master,
                                           width=20,
                                           font=("arial 15 bold"))
        self.entry_cashier_dob.place(x=250, y=270)

        self.labal_cashier_address = Label(master,
                                           text="Cashier Address:",
                                           font=("arial 15 bold"))
        self.labal_cashier_address.place(x=50, y=320)
        self.entry_cashier_address = Entry(master,
                                           width=20,
                                           font=("arial 15 bold"))
        self.entry_cashier_address.place(x=250, y=320)

        self.labal_cashier_phone = Label(master,
                                         text="Cashier Phone",
                                         font=("arial 15 bold"))
        self.labal_cashier_phone.place(x=50, y=370)
        self.entry_cashier_phone = Entry(master,
                                         width=20,
                                         font=("arial 15 bold"))
        self.entry_cashier_phone.place(x=250, y=370)

        self.labal_cashier_email = Label(master,
                                         text="Cashier Email:",
                                         font=("arial 15 bold"))
        self.labal_cashier_email.place(x=50, y=420)
        self.entry_cashier_email = Entry(master,
                                         width=20,
                                         font=("arial 15 bold"))
        self.entry_cashier_email.place(x=250, y=420)

        self.labal_cashier_remarks = Label(master,
                                           text="Remarks:",
                                           font=("arial 15 bold"))
        self.labal_cashier_remarks.place(x=50, y=470)
        self.entry_cashier_remarks = Entry(master,
                                           width=20,
                                           font=("arial 15 bold"))
        self.entry_cashier_remarks.place(x=250, y=470)

        # button
        self.button_add = Button(
            master,
            text="Add",
            command=self.addCashier,
            font=("arial 13 bold"),
            width=8,
            height=1,
            bg="steelblue",
            fg="white",
        )
        self.button_add.place(x=50, y=510)

        self.button_search = Button(
            master,
            text="Search",
            command=self.searchCashier,
            font=("arial 13 bold"),
            width=8,
            height=1,
            bg="steelblue",
            fg="white",
        )
        self.button_search.place(x=155, y=510)

        self.button_update = Button(
            master,
            text="Update",
            command=self.updateCashier,
            font=("arial 13 bold"),
            width=8,
            height=1,
            bg="steelblue",
            fg="white",
        )
        self.button_update.place(x=260, y=510)

        self.button_delete = Button(
            master,
            text="Delete",
            command=self.deleteCashier,
            font=("arial 13 bold"),
            width=8,
            height=1,
            bg="steelblue",
            fg="white",
        )
        self.button_delete.place(x=365, y=510)

        #table for tha detail view of the propduct
        self.table_frame = Frame(master, width=820, height=490, bg="steelblue")
        self.table_frame.place(x=500, y=50)

        self.labal_id = Label(self.table_frame,
                              text=("Cashier Id"),
                              font=("arial 15 bold"),
                              bg="steelblue",
                              fg="black")
        self.labal_id.place(x=40, y=12)

        self.entry_cash_id = Entry(self.table_frame,
                                   width="10",
                                   font=("arial 15 bold"),
                                   bg="lightblue",
                                   fg="black")
        self.entry_cash_id.place(x=150, y=10)

        self.btn_show_detail = Button(
            self.table_frame,
            command=self.cashierDetail,
            text=" Show",
            width="7",
            height=1,
            font=("arial 12 bold"),
            bg="green",
            fg="black",
        )
        self.btn_show_detail.place(x=300, y=10)

        self.btn_show_detailAll = Button(
            self.table_frame,
            command=self.cashierDetailAll,
            text=" Show All",
            width="7",
            height=1,
            font=("arial 12 bold"),
            bg="green",
            fg="black",
        )
        self.btn_show_detailAll.place(x=430, y=10)

        self.labal_date_today = Label(self.table_frame,
                                      text="Today's Date:" + str(date),
                                      font=(" arial 14 bold"),
                                      bg="steelblue",
                                      fg="black")
        self.labal_date_today.place(x=600, y=20)

        self.trv_frame = Frame(master, width=800, height=420, bg="grey")
        self.trv_frame.place(x=510, y=100)

        self.horizontalScrollbar = ttk.Scrollbar(self.trv_frame,
                                                 orient='horizontal')
        self.verticalScrollbar = ttk.Scrollbar(self.trv_frame,
                                               orient='vertical')

        self.trv = ttk.Treeview(self.trv_frame,
                                height="20",
                                xscrollcommand=self.horizontalScrollbar,
                                yscrollcommand=self.verticalScrollbar)
        self.trv.place(x=20, y=50)
        self.trv['columns'] = ('Id', 'Name', 'Username', 'Password',
                               'BirthDate', 'Address', 'Phone', 'Email',
                               'Remarks', 'AddedOn', 'ModifiedOn')

        self.horizontalScrollbar.pack(fill=X, side=BOTTOM)
        self.verticalScrollbar.pack(fill=BOTH, side=RIGHT)
        self.horizontalScrollbar.configure(command=self.trv.xview)
        self.verticalScrollbar.configure(command=self.trv.yview)

        self.trv['show'] = 'headings'
        self.trv.column('Id', width=30, minwidth=20, anchor=tk.CENTER)
        self.trv.column('Name', width=70, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Username', width=80, minwidth=50, anchor=tk.CENTER)
        self.trv.column('Password', width=80, minwidth=50, anchor=tk.CENTER)
        self.trv.column('BirthDate', width=80, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Address', width=80, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Phone', width=50, minwidth=40, anchor=tk.CENTER)
        self.trv.column('Email', width=60, minwidth=60, anchor=tk.CENTER)
        self.trv.column('Remarks', width=80, minwidth=60, anchor=tk.CENTER)
        self.trv.column('AddedOn', width=80, minwidth=60, anchor=tk.CENTER)
        self.trv.column('ModifiedOn', width=90, minwidth=60, anchor=tk.CENTER)

        self.trv.heading('Id', text='Id', anchor=tk.CENTER)
        self.trv.heading('Name', text='Name', anchor=tk.CENTER)
        self.trv.heading('Username', text='Username', anchor=tk.CENTER)
        self.trv.heading('Password', text='Password', anchor=tk.CENTER)
        self.trv.heading('BirthDate', text='Birth Date ', anchor=tk.CENTER)
        self.trv.heading('Address', text='Address', anchor=tk.CENTER)
        self.trv.heading('Phone', text='Phone', anchor=tk.CENTER)
        self.trv.heading('Email', text='Email', anchor=tk.CENTER)
        self.trv.heading('Remarks', text='Remarks', anchor=tk.CENTER)
        self.trv.heading('AddedOn', text='AddedOn', anchor=tk.CENTER)
        self.trv.heading('ModifiedOn', text='ModifiedOn.', anchor=tk.CENTER)
        self.trv.pack(fill=BOTH)
        self.cashierDetailAll()

        # text box
        self.textbox_text = Text(master, width=102, height=7)
        self.textbox_text.place(x=500, y=550)

        self.textbox_text.insert(
            END,
            "Cashier ID has reached upto:" + str(id) + " in the database.\n")

    def cashierDetail(self, *args, **kwargs):
        self.get_id = self.entry_cash_id.get()
        sql = "SELECT * FROM cashier WHERE  cashier_id=? "
        c.execute(sql, (self.get_id, ))
        self.rows = c.fetchall()
        self.trv.delete(*self.trv.get_children())
        if len(self.rows) != 0:

            self.i = 0
            for row in self.rows:

                self.trv.insert('',
                                self.i,
                                text='',
                                values=(row[0], row[1], row[2], row[3], row[4],
                                        row[5], row[6], row[7], row[8], row[9],
                                        row[10]))
                self.i += 1
        else:
            tkinter.messagebox.showinfo(
                "Error!",
                "No Such Cashier Found in database.\nEnter correct cashier_id..."
            )

    def cashierDetailAll(self, *args, **kwargs):
        self.entry_cash_id.delete(0, END)
        sql = "SELECT * FROM cashier "
        c.execute(sql)
        self.rows = c.fetchall()
        self.trv.delete(*self.trv.get_children())
        if len(self.rows) != 0:

            self.i = 0
            for row in self.rows:
                self.trv.insert('',
                                self.i,
                                text='',
                                values=(row[0], row[1], row[2], row[3], row[4],
                                        row[5], row[6], row[7], row[8], row[9],
                                        row[10]))
                self.i += 1

        conn.commit()

    def addCashier(self, *args, **kwargs):
        self.cashier_name = self.entry_cashier_name.get()
        self.cashier_username = self.entry_cashier_username.get()
        self.cashier_password = self.entry_cashier_password.get()
        self.cashier_dob = self.entry_cashier_dob.get()
        self.cashier_address = self.entry_cashier_address.get()
        self.cashier_phone = self.entry_cashier_phone.get()
        self.cashier_email = self.entry_cashier_email.get()
        self.cashier_remarks = self.entry_cashier_remarks.get()

        if self.cashier_name != '' and self.cashier_username != '' and self.cashier_password != '' and self.cashier_dob != "" and self.cashier_address != "" and self.cashier_phone != '' and self.cashier_email != "":
            sql = "INSERT INTO cashier(cashier_name,cashier_user_name,cashier_password,cashier_dob,cashier_address,cashier_phone, cashier_email,cashier_remarks,added_date) VALUES(?,?,?,?,?,?,?,?,?)"
            c.execute(sql, (self.cashier_name, self.cashier_username,
                            self.cashier_password, self.cashier_dob,
                            self.cashier_address, self.cashier_phone,
                            self.cashier_email, self.cashier_remarks, date))
            conn.commit()

            self.textbox_text.insert(
                END, "\n Inserted! " + str(self.cashier_name) +
                " into the database")
            tkinter.messagebox.showinfo(
                "Success!", "The Cashier Details Are Saved\nSuccessfully!")
        else:
            tkinter.messagebox.showinfo(
                "Error!", "Please Fill All Fields\n All Fields are Required")

        self.entry_cashier_id.delete(0, END)
        self.entry_cashier_name.delete(0, END)
        self.entry_cashier_username.delete(0, END)
        self.entry_cashier_password.delete(0, END)
        self.entry_cashier_dob.delete(0, END)
        self.entry_cashier_address.delete(0, END)
        self.entry_cashier_phone.delete(0, END)
        self.entry_cashier_email.delete(0, END)
        self.entry_cashier_remarks.delete(0, END)

    def searchCashier(self, *args, **kwargs):
        self.entry_cashier_name.delete(0, END)
        self.entry_cashier_username.delete(0, END)
        self.entry_cashier_password.delete(0, END)
        self.entry_cashier_dob.delete(0, END)
        self.entry_cashier_address.delete(0, END)
        self.entry_cashier_phone.delete(0, END)
        self.entry_cashier_email.delete(0, END)
        self.entry_cashier_remarks.delete(0, END)

        sql = "SELECT cashier_id FROM cashier"
        self.result = c.execute(sql).fetchall()
        if self.entry_cashier_id.get() != '' and [
                self.result for self.result in self.result
                if self.result[0] == int(self.entry_cashier_id.get())
        ]:
            sql = "SELECT * FROM cashier WHERE cashier_id=?"
            result = c.execute(
                sql,
                (self.entry_cashier_id.get()),
            )
            for r in result:
                self.r1 = r[1]
                self.r2 = r[2]
                self.r3 = r[3]
                self.r4 = r[4]
                self.r5 = r[5]
                self.r6 = r[6]
                self.r7 = r[7]
                self.r8 = r[8]
                self.r9 = r[9]
            conn.commit()

            self.entry_cashier_name.delete(0, END)
            self.entry_cashier_name.insert(0, str(self.r1))
            self.entry_cashier_username.delete(0, END)
            self.entry_cashier_username.insert(0, str(self.r2))
            self.entry_cashier_password.delete(0, END)
            self.entry_cashier_password.insert(0, str(self.r3))
            self.entry_cashier_dob.delete(0, END)
            self.entry_cashier_dob.insert(0, str(self.r4))
            self.entry_cashier_address.delete(0, END)
            self.entry_cashier_address.insert(0, str(self.r5))
            self.entry_cashier_phone.delete(0, END)
            self.entry_cashier_phone.insert(0, str(self.r6))
            self.entry_cashier_email.delete(0, END)
            self.entry_cashier_email.insert(0, str(self.r6))
            self.entry_cashier_remarks.delete(0, END)
            self.entry_cashier_remarks.insert(0, str(self.r8))
            self.textbox_text.insert(
                END, "\n Searched!,\tCashier with id " +
                self.entry_cashier_id.get() + " in the database")
        else:
            self.entry_cashier_id.delete(0, END)
            tkinter.messagebox.showinfo(
                "Error!",
                "Wrong Cashier Id Format.\nCashier Id Format:Number.\nEnter  Correct Cashier Id."
            )

    def updateCashier(self, *args, **kwargs):
        self.cashier_name = self.entry_cashier_name.get()
        self.cashier_username = self.entry_cashier_username.get()
        self.cashier_password = self.entry_cashier_password.get()
        self.cashier_dob = self.entry_cashier_dob.get()
        self.cashier_address = self.entry_cashier_address.get()
        self.cashier_phone = self.entry_cashier_phone.get()
        self.cashier_email = self.entry_cashier_email.get()
        self.cashier_remarks = self.entry_cashier_remarks.get()

        if self.cashier_name != '' and self.cashier_username != '' and self.cashier_password != '' and self.cashier_dob != "" and self.cashier_address != "" and self.cashier_phone != '' and self.cashier_email != "":
            self.u1 = self.cashier_name
            self.u2 = self.cashier_username
            self.u3 = self.cashier_password
            self.u4 = self.cashier_dob
            self.u5 = self.cashier_address
            self.u6 = self.cashier_phone
            self.u7 = self.cashier_email
            self.u8 = self.cashier_remarks

            sql = "UPDATE  cashier SET cashier_name=?,cashier_user_name=?,cashier_password=?,cashier_dob=?,cashier_address=?,cashier_phone=?,cashier_email=?,cashier_remarks=?,modified_date=? WHERE cashier_id=?"
            c.execute(sql,
                      (self.u1, self.u2, self.u3, self.u4, self.u5, self.u6,
                       self.u7, self.u8, date, self.entry_cashier_id.get()))
            self.textbox_text.insert(
                END, "\n Updated! " + str(self.u1) + " into the database")
            tkinter.messagebox.showinfo(
                "Success!,",
                "Successfully!!!\nThe Cashier Details are\nUpdated in Database!!!"
            )
            conn.commit()
        else:
            tkinter.messagebox.showinfo(
                "Error!", "Before Updating,\nCashier Searching Required.")

        self.entry_cashier_id.delete(0, END)
        self.entry_cashier_name.delete(0, END)
        self.entry_cashier_username.delete(0, END)
        self.entry_cashier_password.delete(0, END)
        self.entry_cashier_dob.delete(0, END)
        self.entry_cashier_address.delete(0, END)
        self.entry_cashier_phone.delete(0, END)
        self.entry_cashier_email.delete(0, END)
        self.entry_cashier_remarks.delete(0, END)

    def deleteCashier(self, *args, **kwargs):
        sql = "SELECT cashier_id FROM cashier"
        self.result = c.execute(sql).fetchall()

        if self.entry_cashier_id.get() != '' and [
                self.result for self.result in self.result
                if self.result[0] == int(self.entry_cashier_id.get())
        ]:
            sql = "DELETE FROM  cashier WHERE cashier_id=?"
            c.execute(sql, (self.entry_cashier_id.get(), ))
            self.textbox_text.insert(
                END, "\n Deleted!\tCashier with id " +
                self.entry_cashier_id.get() + " from the database")
            tkinter.messagebox.showinfo(
                "Success!,",
                "Successfully!!!\nThe Cashier Details are\nDeleted form Database!!!"
            )
            conn.commit()

        else:
            tkinter.messagebox.showinfo(
                "Error!", " Before Deleting,\nCashier Searching Required.")

        self.entry_cashier_id.delete(0, END)
        self.entry_cashier_name.delete(0, END)
        self.entry_cashier_username.delete(0, END)
        self.entry_cashier_password.delete(0, END)
        self.entry_cashier_dob.delete(0, END)
        self.entry_cashier_address.delete(0, END)
        self.entry_cashier_phone.delete(0, END)
        self.entry_cashier_email.delete(0, END)
        self.entry_cashier_remarks.delete(0, END)
Esempio n. 7
0
class Edit:
    def __init__(self, master, type):
        # build ui
        self.master = master
        self.type = type
        self.frame_1 = ttk.Frame(self.master)
        self.frame_4 = ttk.Frame(self.frame_1)
        self.treeview_1 = ttk.Treeview(self.frame_4)
        self.treeview_1.pack(side='left')
        self.frame_4.configure(height='200', width='200')
        self.frame_4.pack(expand='true',
                          fill='x',
                          padx='10',
                          pady='10',
                          side='top')

        self.frame_5 = ttk.Frame(self.frame_4)
        self.label_1 = ttk.Label(self.frame_5)
        self.label_1.configure(text='Dział', width='15')
        self.label_1.pack(padx='5', pady='5', side='left')
        self.combobox_1 = ttk.Combobox(self.frame_5, state="readonly")
        self.combobox_1.pack(expand='true', fill='x', side='left')
        self.combobox_1.bind('<<ComboboxSelected>>', self.fill_combobox2)
        self.frame_5.configure(height='200', width='200')
        self.frame_5.pack(expand='true', fill='x', side='top')
        self.frame_6 = ttk.Frame(self.frame_4)
        self.label_2 = ttk.Label(self.frame_6)
        self.label_2.configure(text='Nazwa', width='15')
        self.label_2.pack(padx='5', pady='5', side='left')
        self.combobox_2 = ttk.Combobox(self.frame_6, state="readonly")
        self.combobox_2.pack(expand='true', fill='x', side='left')
        self.frame_6.configure(height='200', width='200')
        self.frame_6.pack(expand='true', fill='x', side='top')

        self.frame_7 = ttk.Frame(self.frame_4)
        self.label_3 = ttk.Label(self.frame_7)
        self.label_3.configure(text='Cena hurtowa', width='15')
        self.label_3.pack(padx='3', pady='3', side='left')
        self.entry_5 = ttk.Entry(self.frame_7)
        self.entry_5.pack(expand='true', fill='x', side='left')
        self.frame_7.configure(height='200', width='200')
        self.frame_7.pack(expand='true', fill='x', side='top')

        self.frame_8 = ttk.Frame(self.frame_4)
        self.label_4 = ttk.Label(self.frame_8)
        self.label_4.configure(text='Ilość', width='15')
        self.label_4.pack(padx='3', pady='3', side='left')
        self.entry_6 = ttk.Entry(self.frame_8)
        self.entry_6.pack(expand='true', fill='x', side='left')
        self.frame_8.configure(height='200', width='200')
        self.frame_8.pack(expand='true', fill='x', side='top')

        self.frame_9 = ttk.Frame(self.frame_4)
        self.label_5 = ttk.Label(self.frame_9)
        self.label_5.configure(text='Cena netto', width='15')
        self.label_5.pack(padx='3', pady='3', side='left')
        self.entry_7 = ttk.Entry(self.frame_9)
        self.entry_7.pack(expand='true', fill='x', side='left')
        self.frame_9.configure(height='200', width='200')
        self.frame_9.pack(expand='true', fill='x', side='top')

        self.frame_10 = ttk.Frame(self.frame_4)
        self.label_6 = ttk.Label(self.frame_10)
        self.label_6.configure(text='Procent VAT', width='15')
        self.label_6.pack(padx='3', pady='3', side='left')
        self.entry_8 = ttk.Entry(self.frame_10)
        self.entry_8.pack(expand='true', fill='x', side='left')
        self.frame_10.configure(height='200', width='200')
        self.frame_10.pack(expand='true', fill='x', side='top')

        self.frame_11 = ttk.Frame(self.frame_4)
        self.label_7 = ttk.Label(self.frame_11)
        self.label_7.configure(text='Data', width='15')
        self.label_7.pack(padx='3', pady='3', side='left')
        self.dateEntry = DateEntry(self.frame_11,
                                   width=12,
                                   background='darkblue',
                                   locale="pl_PL",
                                   date_pattern="yyyy-mm-dd",
                                   foreground='white',
                                   borderwidth=2)
        self.dateEntry.delete(0, END)
        self.dateEntry.pack(expand='true', fill='x', side='left')
        self.frame_11.configure(height='200', width='200')
        self.frame_11.pack(expand='true', fill='x', side='top')

        self.frame_12 = ttk.Frame(self.frame_4)
        self.button_3 = ttk.Button(self.frame_12)
        self.button_3.configure(text='Filtruj')
        self.button_3.bind('<Button>', self.filter)
        self.button_3.pack(expand='true', fill='x', side='left')
        self.button_4 = ttk.Button(self.frame_12)
        self.button_4.configure(text='Wyczyść')
        self.button_4.bind('<Button>', self.clear)
        self.button_4.pack(expand='true', fill='x', side='left')
        self.frame_12.configure(height='200', width='200')
        self.frame_12.pack(expand='true', fill='x', side='top', padx='3')

        self.frame_1.configure(height='200', width='200')
        self.frame_1.pack(side='top')
        self.id = None
        if self.type == 0:
            self.treeview_1['columns'] = ('ID', 'Nazwa', 'Cena netto',
                                          'Procent VAT', 'Dział')
            self.treeview_1.column("#0", width=0)
            self.treeview_1.column('ID', width=30)
            self.treeview_1.column('Nazwa', width=130)
            self.treeview_1.column('Cena netto', width=80)
            self.treeview_1.column('Procent VAT', width=80)
            self.treeview_1.column('Dział', width=150)
            self.treeview_1.heading("#0", text='', anchor="w")
            self.treeview_1.heading('ID', text='ID')
            self.treeview_1.heading('Nazwa', text='Nazwa')
            self.treeview_1.heading('Cena netto', text='Cena netto')
            self.treeview_1.heading('Procent VAT', text='Procent VAT')
            self.treeview_1.heading('Dział', text='Dział')
            self.add_items(DB_Connection.select_products())
            self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_products)

            self.entry_5.config(state='disabled')
            self.entry_6.config(state='disabled')
            self.dateEntry.config(state='disabled')

            self.frame_2 = ttk.Frame(self.frame_1)
            self.entry_1 = ttk.Entry(self.frame_2)
            self.entry_1.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.entry_2 = ttk.Entry(self.frame_2)
            self.entry_2.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.entry_3 = ttk.Entry(self.frame_2)
            self.entry_3.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.entry_4 = ttk.Entry(self.frame_2)
            self.entry_4.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.frame_2.configure(height='200', width='200')
            self.frame_2.pack(fill='x', side='top')

        elif self.type == 1:
            self.treeview_1['columns'] = ('ID', 'Data', 'Nazwa',
                                          'Cena hurtowa', 'Ilość', 'Dział')
            self.treeview_1.column("#0", width=0)
            self.treeview_1.column('ID', width=30)
            self.treeview_1.column('Data', width=80)
            self.treeview_1.column('Nazwa', width=130)
            self.treeview_1.column('Cena hurtowa', width=100)
            self.treeview_1.column('Ilość', width=80)
            self.treeview_1.column('Dział', width=150)
            self.treeview_1.heading("#0", text='', anchor="w")
            self.treeview_1.heading('ID', text='ID')
            self.treeview_1.heading('Data', text='Data')
            self.treeview_1.heading('Nazwa', text='Nazwa')
            self.treeview_1.heading('Cena hurtowa', text='Cena hurtowa')
            self.treeview_1.heading('Ilość', text='Ilość')
            self.treeview_1.heading('Dział', text='Dział')
            self.add_items(DB_Connection.select_supplies())
            self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_supplies)

            self.entry_7.config(state='disabled')
            self.entry_8.config(state='disabled')

            self.frame_2 = ttk.Frame(self.frame_1)
            self.entry_1 = ttk.Entry(self.frame_2)
            self.entry_1.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.entry_2 = ttk.Entry(self.frame_2)
            self.entry_2.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.frame_2.configure(height='200', width='200')
            self.frame_2.pack(fill='x', side='top')

        elif self.type == 2:
            self.treeview_1['columns'] = ('ID', 'Data', 'Nazwa', 'Ilość',
                                          'Dział')
            self.treeview_1.column("#0", width=0)
            self.treeview_1.column('ID', width=30)
            self.treeview_1.column('Data', width=80)
            self.treeview_1.column('Nazwa', width=130)
            self.treeview_1.column('Ilość', width=80)
            self.treeview_1.column('Dział', width=150)
            self.treeview_1.heading("#0", text='', anchor="w")
            self.treeview_1.heading('ID', text='ID')
            self.treeview_1.heading('Data', text='Data')
            self.treeview_1.heading('Nazwa', text='Nazwa')
            self.treeview_1.heading('Ilość', text='Ilość')
            self.treeview_1.heading('Dział', text='Dział')
            self.add_items(DB_Connection.select_sales())
            self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_sales)

            self.entry_5.config(state='disabled')
            self.entry_7.config(state='disabled')
            self.entry_8.config(state='disabled')

            self.frame_2 = ttk.Frame(self.frame_1)
            self.entry_1 = ttk.Entry(self.frame_2)
            self.entry_1.pack(expand='true',
                              fill='x',
                              ipadx='8',
                              ipady='8',
                              padx='2',
                              pady='2',
                              side='left')
            self.frame_2.configure(height='200', width='200')
            self.frame_2.pack(fill='x', side='top')

        self.frame_3 = ttk.Frame(self.frame_1)
        self.button_1 = ttk.Button(self.frame_3)
        self.button_1.configure(text='Edytuj')
        self.button_1.pack(expand='true',
                           fill='x',
                           ipadx='3',
                           ipady='3',
                           side='top')
        self.button_1.bind('<Button>', self.edit)
        self.button_2 = ttk.Button(self.frame_3)
        self.button_2.configure(text='Usuń')
        self.button_2.pack(expand='true',
                           fill='x',
                           ipadx='3',
                           ipady='3',
                           side='top')
        self.button_2.bind('<Button>', self.delete)
        self.frame_3.configure(height='200', width='200')
        self.frame_3.pack(fill='x', side='top')
        self.frame_1.configure(height='200', padding='8', width='200')
        self.frame_1.pack(side='top')

        # Main widget
        self.mainwindow = self.frame_1
        if self.type == 0:
            a, b = 720, 349
        elif self.type == 1:
            a, b = 839, 346
        else:
            a, b = 739, 346
        x = self.master.winfo_screenwidth() // 2 - a // 2 - 10
        y = self.master.winfo_screenheight() // 2 - b // 2 - 10
        self.master.geometry(f'+{x}+{y}')
        self.master.title('Edytuj')

    def fill_combobox1(self):
        self.combobox_1['values'] = DB_Connection.get_sections()

    def fill_combobox2(self, event):
        self.combobox_2['values'] = DB_Connection.get_products(
            self.combobox_1['values'][self.combobox_1.current()])

    def filter(self, event):
        params = {}
        params['Products.section'], params['Products.name'], params['Data.quantity_price'], params['Data.amount'], params['Products.netto_price'], params['Products.vat_percentage'], params['Data.date'] = \
            self.combobox_1.get(), self.combobox_2.get(), self.entry_5.get(), self.entry_6.get(), self.entry_7.get(), self.entry_8.get(), self.dateEntry.get_date().strftime('%Y-%m-%d') if self.dateEntry._validate_date() else ""
        print(params)
        filtered_grid = DB_Connection.select_with_filters(self.type, params)
        print(filtered_grid)
        self.treeview_1.delete(*self.treeview_1.get_children())
        self.add_items(filtered_grid)

    def clear(self, event):
        self.combobox_1.set('')
        self.combobox_2.set('')
        self.entry_5.delete(0, END)
        self.entry_6.delete(0, END)
        self.entry_7.delete(0, END)
        self.entry_8.delete(0, END)
        self.dateEntry.delete(0, END)

    def add_items(self, records):
        for r in records:
            self.treeview_1.insert("", "end", values=r)

    def edit(self, event):
        if self.id is not None and self.treeview_1.selection() != ():
            import Product as P
            pr = P.Product(*DB_Connection.get_settings())
            if self.type == 0:
                pr.Name = (self.entry_1.get(), self.master)
                pr.Netto_price = (self.entry_2.get(), self.master)
                pr.Vat_percentage = (self.entry_3.get(), self.master)
                pr.Section = (self.entry_4.get(), self.master)
                if pr.final_prod_check(
                    [pr.Section, pr.Name, pr.Netto_price, pr.Vat_percentage]):
                    DB_Connection.edit_product(self.master, pr, self.id)
                    focused = self.treeview_1.focus()
                    self.treeview_1.insert(
                        "",
                        str(focused)[1:],
                        values=(self.id, pr.Name, pr.Netto_price,
                                pr.Vat_percentage, pr.Section))
                    self.treeview_1.delete(focused)
            elif self.type == 1:
                pr.Quantity_price = (self.entry_1.get(), self.master)
                pr.Amount = (self.entry_2.get(), self.master)
                if pr.final_prod_check([pr.Quantity_price, pr.Amount]):
                    DB_Connection.edit_supply(self.master, pr, self.id)
                    focused = self.treeview_1.focus()
                    item = self.treeview_1.item(focused)['values']
                    self.treeview_1.insert("",
                                           str(focused)[1:],
                                           values=(self.id, item[1], item[2],
                                                   pr.Quantity_price,
                                                   pr.Amount, item[5]))
                    self.treeview_1.delete(focused)
            else:
                pr.Amount = (self.entry_1.get(), self.master)
                if pr.final_prod_check([pr.Amount]):
                    DB_Connection.edit_sale(self.master, pr, self.id)
                    focused = self.treeview_1.focus()
                    item = self.treeview_1.item(focused)['values']
                    self.treeview_1.insert("",
                                           str(focused)[1:],
                                           values=(self.id, item[1], item[2],
                                                   pr.Amount, item[4]))
                    self.treeview_1.delete(focused)
        else:
            messagebox.showerror(
                parent=self.master,
                title='Błąd',
                message='Zaznacz element, który chcesz edytować')

    def delete(self, event):
        if self.id is not None and self.treeview_1.selection() != ():
            if self.type == 0:
                DB_Connection.delete_product(self.id)
            else:
                DB_Connection.delete_supply_or_sale(self.id)
            focused = self.treeview_1.focus()
            self.treeview_1.delete(focused)
        else:
            messagebox.showerror(
                parent=self.master,
                title='Błąd',
                message='Zaznacz element, który chcesz usunąć')

    def on_select_products(self, event):
        selected = event.widget.focus()
        self.entry_1.delete(0, END)
        self.entry_2.delete(0, END)
        self.entry_3.delete(0, END)
        self.entry_4.delete(0, END)
        item = self.treeview_1.item(selected)['values']
        self.id = item[0]
        self.entry_1.insert(0, item[1])
        self.entry_2.insert(0, item[2])
        self.entry_3.insert(0, item[3])
        self.entry_4.insert(0, item[4])

    def on_select_supplies(self, event):
        selected = event.widget.focus()
        self.entry_1.delete(0, END)
        self.entry_2.delete(0, END)
        item = self.treeview_1.item(selected)['values']
        self.id = item[0]
        self.entry_1.insert(0, item[3])
        self.entry_2.insert(0, item[4])

    def on_select_sales(self, event):
        selected = event.widget.focus()
        self.entry_1.delete(0, END)
        item = self.treeview_1.item(selected)['values']
        self.id = item[0]
        self.entry_1.insert(0, item[3])

    def run(self):
        self.mainwindow.mainloop()
Esempio n. 8
0
def open_new_rule_dialog():
    # Toplevel object which will
    # be treated as a new window
    global rule_dialog
    rule_dialog = Toplevel(root)

    # sets the title of the
    # Toplevel widget
    rule_dialog.title("Portfolio App - Sukurti naują taisyklę")

    rule_dialog.iconbitmap(
        'C:\PythonPrograms\Bakalauro Baigiamasis Darbas\LSTM stock price prediction\money.ico'
    )
    # sets the geometry of toplevel
    rule_dialog.geometry("450x400")

    # A Label widget to show in toplevel
    Label(rule_dialog, text="Pasirinkta įmonė: ").grid(sticky="w",
                                                       row=0,
                                                       column=0,
                                                       padx=10,
                                                       pady=10)
    global company_name
    company_name = Entry(rule_dialog, width=30, borderwidth=2)
    company_name.insert(0, get_selected_company())
    company_name.grid(sticky="w", row=0, column=1, padx=(0, 10), pady=10)
    Label(rule_dialog,
          text="Pasirinkta investavimo strategija: ").grid(sticky="w",
                                                           row=1,
                                                           column=0,
                                                           padx=10,
                                                           pady=10)
    options = [
        "LSTM Rekurentinis Neuroninis Tinklas", "Fibonacci Retracement Lygiai",
        "Vėžlių Prekyba", "Ilgalaikė investicija"
    ]

    global clicked
    clicked = StringVar()
    clicked.set(options[0])

    drop = OptionMenu(rule_dialog, clicked, *options)
    drop.grid(sticky="w", row=1, column=1, padx=(0, 10), pady=10)

    Label(rule_dialog, text="Data nuo: ").grid(sticky="w",
                                               row=2,
                                               column=0,
                                               padx=10,
                                               pady=10)
    start_date = DateEntry(rule_dialog,
                           width=12,
                           background='darkblue',
                           foreground='white',
                           borderwidth=2,
                           date_pattern='yyyy-mm-dd')
    start_date.grid(sticky="w", row=2, column=1, padx=(0, 10), pady=10)
    start_date.delete(0, END)
    start_date.insert(0, '2012-01-01')
    Label(rule_dialog, text="Data iki: ").grid(sticky="w",
                                               row=3,
                                               column=0,
                                               padx=10,
                                               pady=10)
    end_date = DateEntry(rule_dialog,
                         width=12,
                         background='darkblue',
                         foreground='white',
                         borderwidth=2,
                         date_pattern='yyyy-mm-dd')
    end_date.grid(sticky="w", row=3, column=1, padx=(0, 10), pady=10)
    end_date.delete(0, END)
    end_date.insert(0, '2021-05-21')

    chooseStrategyButton = Button(
        rule_dialog,
        text="Įtraukti taisyklę",
        command=lambda: select_rule(company_name.get(), clicked.get(),
                                    start_date.get(), end_date.get()))
    chooseStrategyButton.grid(row=4, column=0, columnspan=2, padx=10, pady=10)
Esempio n. 9
0
class Frequencia(object):

    IMGDIR = os.path.join(os.path.dirname(__file__), 'imagens')

    def __init__(self, root, model):
        self.toplevel = root
        self.toplevel.title('Controle de Frequência')
        self.modelo = model()

        self.operacao = 'Browse'
        self.info_label = StringVar()
        """Configuração inicial dos radiobutton"""
        self.presenca = StringVar()
        self.PRESENCA = [("Presente", "P"), ("Ausente", "F"),
                         ("Justificada", "J")]
        self.presenca.set("P")

        self.ANO = [2019, 2020, 2021, 2022]
        """Estilos"""
        style = ttk.Style()
        style.configure("BW.TLabel",
                        padding=6,
                        foreground="white",
                        background="brown",
                        font=('helvetica', 9, 'bold'))
        style.configure("BW.TEntry",
                        padding=6,
                        background="#ccc",
                        relief="flat")
        #opcoes combobox -column, -columnspan, -in, -ipadx, -ipady, -padx, -pady, -row, -rowspan, or -sticky
        style.configure("BW.TCombo", ipady=5, relief="flat")
        style.configure("BW.TButton",
                        padding=6,
                        relief="flat",
                        background="#ccc")
        style.configure('BW.Treeview',
                        highlightthickness=0,
                        bd=0,
                        font=('Calibri', 11))
        style.configure("BW.Treeview.Heading",
                        background="blue",
                        foreground="brown",
                        relief="flat")
        style.configure("BW.TDataentry",
                        fieldbackground='light green',
                        background='dark green',
                        foreground='dark blue',
                        arrowcolor='white')
        """Imagens para os botões"""
        self.btnNewImage = PhotoImage(file=self.IMGDIR +
                                      '\\new.png').subsample(3, 3)
        self.btnDelImage = PhotoImage(file=self.IMGDIR +
                                      '\\del.png').subsample(3, 3)
        self.btnSaveImage = PhotoImage(file=self.IMGDIR +
                                       '\\disk_save.png').subsample(3, 3)
        self.btnCancelImage = PhotoImage(file=self.IMGDIR +
                                         '\\cancel.png').subsample(3, 3)
        self.btnLoopImage = PhotoImage(
            file=self.IMGDIR + '\\iconfinder_refresh_326679.png').subsample(
                3, 3)
        self.btnCloseImage = PhotoImage(
            file=self.IMGDIR +
            '\\iconfinder_icons_exit2_1564506.png').subsample(3, 3)

        self.searchFrame = ttk.Frame(self.toplevel)
        self.searchFrame.grid(column=0, row=0, padx=10, pady=10, columnspan=2)
        self.tableFrame = ttk.Frame(self.toplevel)
        self.tableFrame.grid(column=0, row=1, padx=10, pady=10)
        self.formFrame = ttk.LabelFrame(self.toplevel, text='Informações')
        self.formFrame.grid(column=1, row=1, padx=10, pady=10)

        self.statusFrame = ttk.Frame(self.toplevel, border=1, relief=FLAT)
        self.statusFrame.grid(column=0, row=2, padx=10, pady=10, columnspan=2)

        root.grid_rowconfigure(2, weight=1)
        root.grid_columnconfigure(1, weight=1)

        self.createtable()
        self.createsearch()
        self.createform()
        self.createBarraStatus()
        self.estadoBotoes()

    def createform(self):
        self.container1 = Frame(self.formFrame)
        self.container1['pady'] = 10
        self.container1.grid(row=1, column=0)
        self.lblCadastro = ttk.Label(self.container1,
                                     style="BW.TLabel",
                                     text="Cadastro:",
                                     width=12)
        self.lblCadastro.pack(side=LEFT)
        self.txtCadastro = ttk.Entry(self.container1, style="BW.TEntry")
        self.txtCadastro['state'] = DISABLED
        self.txtCadastro['width'] = 20
        self.txtCadastro.pack(side=LEFT, padx=(10, 5))

        self.container2 = Frame(self.formFrame)
        self.container2['pady'] = 10
        self.container2.grid(row=2, column=0)
        self.lblReuniao = ttk.Label(self.container2,
                                    style="BW.TLabel",
                                    text="Data Reunião:",
                                    width=12)
        self.lblReuniao.pack(side=LEFT)
        # self.txtReuniao = ttk.Entry(self.container2, style="BW.TEntry")
        # self.txtReuniao['width'] = 20
        # self.txtReuniao['state'] = DISABLED
        # self.txtReuniao.pack(side=LEFT, padx=(10, 5))
        # self.txtReuniao.bind("<FocusOut>", self.formatadata)
        self.txtReuniao = DateEntry(self.container2,
                                    width=11,
                                    background='darkblue',
                                    foreground='white',
                                    borderwidth=2,
                                    year=2019,
                                    locale='pt_BR',
                                    date_pattern='yyyy-MM-dd')
        self.txtReuniao.pack(side=LEFT, ipadx=25, padx=(10, 5))

        self.container3 = Frame(self.formFrame)
        self.container3['pady'] = 10
        self.container3.grid(row=3, column=0)
        for text, mode in self.PRESENCA:
            self.rdbPresenca = Radiobutton(self.container3,
                                           text=text,
                                           variable=self.presenca,
                                           value=mode)
            self.rdbPresenca.pack(anchor=W, side=LEFT, expand=1)
        """ Cria os botões de ações """
        self.container4 = ttk.Frame(self.formFrame)
        self.container4.grid(row=4, column=0, pady=10)
        self.btnNew = ttk.Button(self.container4,
                                 style="BW.TButton",
                                 compound=LEFT)
        self.btnNew['text'] = 'Nova'
        self.btnNew['width'] = 5
        self.btnNew['command'] = self.cadastraFrequencia
        self.btnNew['image'] = self.btnNewImage
        self.btnNew.pack(side=LEFT, padx=10, pady=10)

        self.btnExcluir = ttk.Button(self.container4,
                                     style="BW.TButton",
                                     compound=LEFT)
        self.btnExcluir['text'] = 'Excluir'
        self.btnExcluir['width'] = 6
        self.btnExcluir['command'] = self.excluirFrequencia
        self.btnExcluir['image'] = self.btnDelImage
        self.btnExcluir.pack(side=LEFT, padx=10, pady=10)

        self.btnSave = ttk.Button(self.container4,
                                  style="BW.TButton",
                                  compound=LEFT)
        self.btnSave['text'] = 'Salvar'
        self.btnSave['width'] = 6
        self.btnSave['command'] = self.saveFrequencia
        self.btnSave['image'] = self.btnSaveImage
        self.btnSave.pack(side=LEFT, padx=10, pady=10)

        self.btnCancel = ttk.Button(self.container4,
                                    style="BW.TButton",
                                    compound=LEFT)
        self.btnCancel['text'] = 'Cancelar'
        self.btnCancel['width'] = 8
        self.btnCancel['command'] = self.cancelaFrequencia
        self.btnCancel['image'] = self.btnCancelImage
        self.btnCancel.pack(side=LEFT, padx=10, pady=10)

    def createtable(self):
        self.tree = ttk.Treeview(self.tableFrame,
                                 column=(1, 2, 3),
                                 show="headings",
                                 selectmode='browse')
        self.tree['style'] = "BW.Treeview"
        self.tree.grid(row=0, column=0, columnspan=2, sticky='nsew')
        self.tree.heading(1, text='#')
        self.tree.heading(2, text='Data')
        self.tree.heading(3, text='Frequência')
        self.tree.column(1, width=50, anchor='center')
        self.tree.column(2, width=100, anchor='center')
        self.tree.column(3, width=150, anchor='center')
        self.tree.bind('<Double-Button-1>', self.EditMember)  #clique duplo
        self.tree.bind('<Button-1>', self.navega)
        self.scroll = ttk.Scrollbar(self.tableFrame, orient=VERTICAL)
        self.scroll.grid(row=0, column=3, sticky='ns')
        self.tree.config(yscrollcommand=self.scroll.set)
        self.scroll.config(command=self.tree.yview)

    def createsearch(self):
        self.label = ttk.Label(self.searchFrame,
                               text='Pesquisa: ',
                               style='BW.TLabel',
                               compound=LEFT)
        self.label.grid(column=0, row=0, padx=(5, 5))
        self.cbxData = ttk.Combobox(self.searchFrame, values=self.ANO)
        self.cbxData.current(0)
        self.cbxData.grid(row=0, column=1, ipady=5)
        self.txtSearch = ttk.Entry(self.searchFrame, style="BW.TEntry")
        self.txtSearch.focus_set()
        self.txtSearch.grid(row=0,
                            column=2,
                            columnspan=4,
                            sticky=W,
                            ipadx=50,
                            padx=(10, 5))
        #fazer o bind para a statusbar
        self.txtSearch.bind(
            "<FocusIn>", lambda event: self.statuscommand(
                'Entre com o número do cadastro.'))
        self.btnSearch = ttk.Button(self.searchFrame,
                                    style="BW.TButton",
                                    compound=LEFT)
        self.btnSearch['text'] = 'Localizar'
        self.btnSearch['width'] = 10
        self.btnSearch['command'] = self.localizarmember
        self.btnSearch.grid(row=0, column=6, padx=(10, 5))

    def createBarraStatus(self):
        self.lblMessage = ttk.Label(self.statusFrame,
                                    textvar=self.info_label,
                                    relief=SUNKEN)
        self.lblMessage.pack(expand=1, fill=X, pady=10, padx=5)

    def statuscommand(self, texto):
        self.info_label.set(texto)

    def localizarmember(self):
        md = self.modelo
        valor = self.txtSearch.get()
        md.num_cadastro = valor
        md.ano = self.cbxData.get()
        lista = md.getmember()
        try:
            if len(lista) == 0:
                items = self.tree.get_children()
                self.operacao = 'Browse'
                for item in items:
                    self.tree.delete(item)
            else:
                items = self.tree.get_children()
                for item in items:
                    self.tree.delete(item)
                for row in lista:
                    self.tree.insert('',
                                     'end',
                                     values=(row[0], row[1], row[2]))
                self.txtCadastro.insert(0, self.txtSearch.get())
                self.operacao = 'Insert'
                self.estadoBotoes()

        except:
            self.mensagem(
                'Aviso',
                'O registro de cadastro nº{} não foi localizado.\nOu não há registro para o ano informado.'
                .format(valor))

    def reloadTable(self):
        md = self.modelo
        md.num_cadastro = self.txtSearch.get()
        md.ano = self.cbxData.get()
        lista = md.getmember()
        items = self.tree.get_children()
        for item in items:
            self.tree.delete(item)
        for row in lista:
            self.tree.insert('', 'end', values=(row[0], row[1], row[2]))

    def navega(self, event):
        self.operacao = 'Delete'
        self.estadoBotoes()

    def EditMember(self, event):
        selection = self.tree.selection()
        for selection in self.tree.selection():
            currentItem = self.tree.set(selection, "#1")
            if currentItem:
                lista = self.modelo.getById(currentItem)
                for row in lista:
                    self.id = row[0]
                    self.txtReuniao['state'] = NORMAL
                    self.txtCadastro.delete(0, END)
                    self.txtCadastro.insert(0, row[1])
                    self.txtReuniao.delete(0, END)
                    self.txtReuniao.insert(0, row[2])
                    self.presenca.set(row[3])
                    self.operacao = 'Edit'
                    self.estadoBotoes()
        return

    """Outras funções"""

    def saveFrequencia(self):
        md = self.modelo
        selection = self.tree.selection()
        for selection in self.tree.selection():
            currentItem = self.tree.set(selection, "#1")
            if currentItem:
                md.id = currentItem
        if self.txtCadastro.get() == '':
            md.num_cadastro = self.txtSearch.get()
        else:
            md.num_cadastro = self.txtCadastro.get()
        md.data_reuniao = self.txtReuniao.get()
        md.presenca = self.presenca.get()
        md.ano = self.pegaano(self.txtReuniao.get())
        self.mensagem('Incluir/Alterar', md.savefrequencia(self.operacao))
        self.txtReuniao.delete(0, END)
        self.txtReuniao['state'] = DISABLED
        self.operacao = 'Insert'
        self.estadoBotoes()
        self.reloadTable()

    def excluirFrequencia(self):
        selection = self.tree.selection()
        for selection in self.tree.selection():
            currentItem = self.tree.set(selection, "#1")
            if currentItem:
                lista = self.modelo.delete(currentItem)
                self.mensagem('Delete', lista)
                #self.createtable()
                self.reloadTable()
                self.operacao = 'Delete'
                self.estadoBotoes()
                break
        else:
            self.error('Aviso', 'Você deve selecionar um item primeiro.')

    def cancelaFrequencia(self):
        self.operacao = 'Delete'
        self.estadoBotoes()

    def cadastraFrequencia(self):
        #limpa as caixas de texto
        self.txtReuniao.delete(0, END)
        self.txtReuniao['state'] = NORMAL
        self.operacao = 'Novo'
        self.estadoBotoes()

    def estadoBotoes(self):
        if self.operacao == 'Browse':
            self.btnNew['state'] = DISABLED
            self.btnExcluir['state'] = DISABLED
            self.btnSave['state'] = DISABLED
            self.btnCancel['state'] = DISABLED
        elif self.operacao == 'Insert':
            self.btnNew['state'] = NORMAL
            self.btnExcluir['state'] = DISABLED
            self.btnSave['state'] = DISABLED
            self.btnCancel['state'] = DISABLED
        elif self.operacao == 'Novo':
            self.btnNew['state'] = DISABLED
            self.btnExcluir['state'] = DISABLED
            self.btnSave['state'] = NORMAL
            self.btnCancel['state'] = NORMAL
        elif self.operacao == 'Delete':
            self.btnNew['state'] = NORMAL
            self.btnExcluir['state'] = NORMAL
            self.btnSave['state'] = DISABLED
            self.btnCancel['state'] = DISABLED
        elif self.operacao == 'Edit':
            self.btnNew['state'] = DISABLED
            self.btnExcluir['state'] = DISABLED
            self.btnSave['state'] = NORMAL
            self.btnCancel['state'] = NORMAL

    def exitForm(self):
        self.toplevel.destroy()

    def mensagem(self, tipo, msg):
        messagebox.showinfo(tipo, msg)

    def error(self, tipo, msg):
        messagebox.showwarning(tipo, msg)

    def validate_text(self, texto):
        if len(texto) == 0:
            return False
        else:
            return True

    def pegaano(self, ano):
        ano = ano.split('-')
        return ano[0]
Esempio n. 10
0
class ManageProduct:
    def __init__(self, master, *args, **kwargs):

        self.master = master
        self.heading = Label(master,
                             text="Manage Product Details",
                             font=("arial 30 bold"),
                             fg="steelblue")
        self.heading.place(x=50, y=10)
        # labals
        self.labal_product_id = Label(master,
                                      text="Product Id",
                                      font=("arial 15 bold"))
        self.labal_product_id.place(x=50, y=70)

        self.labal_product_name = Label(master,
                                        text="Name of Product",
                                        font=("arial 15 bold"))
        self.labal_product_name.place(x=50, y=120)

        self.labal_number_of_stocks = Label(master,
                                            text="Number of Stock",
                                            font=("arial 15 bold"))
        self.labal_number_of_stocks.place(x=50, y=170)

        self.labal_cost_price = Label(master,
                                      text="Cost price Per Unit",
                                      font=("arial 15 bold"))
        self.labal_cost_price.place(x=50, y=220)

        self.labal_vender_name = Label(master,
                                       text="Vender's Name",
                                       font=("arial 15 bold"))
        self.labal_vender_name.place(x=50, y=270)

        self.labal_venderphone = Label(master,
                                       text="Vender's Phone",
                                       font=("arial 15 bold"))
        self.labal_venderphone.place(x=50, y=320)

        self.labal_manufacture_date = Label(master,
                                            text="Manufacture Date",
                                            font=("arial 15 bold"))
        self.labal_manufacture_date.place(x=50, y=370)

        self.labal_expiry_date = Label(master,
                                       text="Expiry Date",
                                       font=("arial 15 bold"))
        self.labal_expiry_date.place(x=50, y=420)

        self.labal_maximum_retail_price = Label(master,
                                                text="Max. Retail Price",
                                                font=("arial 15 bold"))
        self.labal_maximum_retail_price.place(x=50, y=470)

        self.labal_marked_price = Label(master,
                                        text="Marked Price",
                                        font=("arial 15 bold"))
        self.labal_marked_price.place(x=50, y=520)

        self.labal_remarks = Label(master,
                                   text="Remarks",
                                   font=("arial 15 bold"))
        self.labal_remarks.place(x=50, y=570)

        #entry
        self.entry_product_id = Entry(master, width=20, font=("arial 15 bold"))
        self.entry_product_id.place(x=250, y=70)

        self.entry_product_name = Entry(master,
                                        width=20,
                                        font=("arial 15 bold"))
        self.entry_product_name.place(x=250, y=120)

        self.entry_number_of_stocks = Entry(master,
                                            width=20,
                                            font=("arial 15 bold"))
        self.entry_number_of_stocks.place(x=250, y=170)

        self.entry_cost_price = Entry(master, width=20, font=("arial 15 bold"))
        self.entry_cost_price.place(x=250, y=220)

        self.entry_vender_name = Entry(master,
                                       width=20,
                                       font=("arial 15 bold"))
        self.entry_vender_name.place(x=250, y=270)

        self.entry_vender_phone = Entry(master,
                                        width=20,
                                        font=("arial 15 bold"))
        self.entry_vender_phone.place(x=250, y=320)

        self.entry_manufacture_date = DateEntry(master,
                                                width=20,
                                                font=("arial 15 bold"))
        self.entry_manufacture_date.place(x=250, y=370)

        self.entry_expiry_date = DateEntry(master,
                                           width=20,
                                           font=("arial 15 bold"))
        self.entry_expiry_date.place(x=250, y=420)

        self.entry_maximum_retail_price = Entry(master,
                                                width=20,
                                                font=("arial 15 bold"))
        self.entry_maximum_retail_price.place(x=250, y=470)

        self.entry_marked_price = Entry(master,
                                        width=20,
                                        font=("arial 15 bold"))
        self.entry_marked_price.place(x=250, y=520)

        self.entry_remarks = Entry(master, width=20, font=("arial 15 bold"))
        self.entry_remarks.place(x=250, y=570)

        # button
        self.button_add = Button(master,
                                 text="Add",
                                 font=("arial 13 bold"),
                                 width=8,
                                 height=1,
                                 bg="steelblue",
                                 fg="white",
                                 command=self.addProduct)
        self.button_add.place(x=50, y=640)

        self.button_add = Button(master,
                                 text="Search",
                                 font=("arial 13 bold"),
                                 width=8,
                                 height=1,
                                 bg="steelblue",
                                 fg="white",
                                 command=self.searchProduct)
        self.button_add.place(x=155, y=640)

        self.button_add = Button(master,
                                 text="Update",
                                 font=("arial 13 bold"),
                                 width=8,
                                 height=1,
                                 bg="steelblue",
                                 fg="white",
                                 command=self.updateProduct)
        self.button_add.place(x=260, y=640)

        self.button_add = Button(master,
                                 text="Delete",
                                 font=("arial 13 bold"),
                                 width=8,
                                 height=1,
                                 bg="steelblue",
                                 fg="white",
                                 command=self.deleteProduct)
        self.button_add.place(x=365, y=640)

        #table for tha detail view of the propduct
        self.table_frame = Frame(master, width=820, height=490, bg="steelblue")
        self.table_frame.place(x=500, y=50)

        self.labal_id = Label(self.table_frame,
                              text=("Product Id"),
                              font=("arial 15 bold"),
                              bg="steelblue",
                              fg="black")
        self.labal_id.place(x=40, y=12)

        self.entry_id = Entry(self.table_frame,
                              width="10",
                              font=("arial 15 bold"),
                              bg="lightblue",
                              fg="black")
        self.entry_id.place(x=150, y=10)

        self.btn_show_detail = Button(self.table_frame,
                                      text=" Show",
                                      width="7",
                                      height=1,
                                      font=("arial 12 bold"),
                                      bg="green",
                                      fg="black",
                                      command=self.show_detail)
        self.btn_show_detail.place(x=300, y=10)

        self.btn_show_detailAll = Button(self.table_frame,
                                         text=" Show All",
                                         width="7",
                                         height=1,
                                         font=("arial 12 bold"),
                                         bg="green",
                                         fg="black",
                                         command=self.show_detailAll)
        self.btn_show_detailAll.place(x=430, y=10)

        self.labal_date_today = Label(self.table_frame,
                                      text="Today's Date:" + str(date),
                                      font=(" arial 14 bold"),
                                      bg="steelblue",
                                      fg="black")
        self.labal_date_today.place(x=600, y=20)

        self.trv_frame = Frame(master, width=800, height=420, bg="grey")
        self.trv_frame.place(x=510, y=100)

        self.horizontalScrollbar = ttk.Scrollbar(self.trv_frame,
                                                 orient='horizontal')
        self.verticalScrollbar = ttk.Scrollbar(self.trv_frame,
                                               orient='vertical')

        self.trv = ttk.Treeview(self.trv_frame,
                                height="20",
                                xscrollcommand=self.horizontalScrollbar,
                                yscrollcommand=self.verticalScrollbar)
        self.trv.place(x=20, y=50)
        self.trv['columns'] = ('Id', 'Product', 'Stocks', 'CostPrice',
                               'Vender', 'Phone', 'Mfd.Date', 'Exp.Date',
                               'Max.Ret.Price', 'MarkedPrice', 'Remarks',
                               'AddedOn', 'ModifiedOn')

        self.horizontalScrollbar.pack(fill=X, side=BOTTOM)
        self.verticalScrollbar.pack(fill=BOTH, side=RIGHT)
        self.horizontalScrollbar.configure(command=self.trv.xview)
        self.verticalScrollbar.configure(command=self.trv.yview)

        self.trv['show'] = 'headings'
        self.trv.column('Id', width=30, minwidth=20, anchor=tk.CENTER)
        self.trv.column('Product', width=90, minwidth=80, anchor=tk.CENTER)
        self.trv.column('Stocks', width=50, minwidth=40, anchor=tk.CENTER)
        self.trv.column('CostPrice', width=40, minwidth=40, anchor=tk.CENTER)
        self.trv.column('Vender', width=50, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Phone', width=70, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Mfd.Date', width=70, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Exp.Date', width=70, minwidth=70, anchor=tk.CENTER)
        self.trv.column('Max.Ret.Price',
                        width=60,
                        minwidth=60,
                        anchor=tk.CENTER)
        self.trv.column('MarkedPrice', width=40, minwidth=40, anchor=tk.CENTER)
        self.trv.column('Remarks', width=80, minwidth=60, anchor=tk.CENTER)
        self.trv.column('AddedOn', width=50, minwidth=50, anchor=tk.CENTER)
        self.trv.column('ModifiedOn', width=80, minwidth=70, anchor=tk.CENTER)

        self.trv.heading('Id', text='Id', anchor=tk.CENTER)
        self.trv.heading('Product', text='Product', anchor=tk.CENTER)
        self.trv.heading('Stocks', text='Stock', anchor=tk.CENTER)
        self.trv.heading('CostPrice', text='C.P.', anchor=tk.CENTER)
        self.trv.heading('Vender', text='Vender', anchor=tk.CENTER)
        self.trv.heading('Phone', text='V.Phone', anchor=tk.CENTER)
        self.trv.heading('Mfd.Date', text='Mfd.Date', anchor=tk.CENTER)
        self.trv.heading('Exp.Date', text='Exp.Date', anchor=tk.CENTER)
        self.trv.heading('Max.Ret.Price', text='M.R.P.', anchor=tk.CENTER)
        self.trv.heading('MarkedPrice', text='M.P.', anchor=tk.CENTER)
        self.trv.heading('Remarks', text='Remarks.', anchor=tk.CENTER)
        self.trv.heading('AddedOn', text='AddedOn', anchor=tk.CENTER)
        self.trv.heading('ModifiedOn', text='ModifiedOn', anchor=tk.CENTER)
        self.trv.pack(fill=BOTH)
        self.show_detailAll()

        # text box
        self.textbox_text = Text(master, width=102, height=7)
        self.textbox_text.place(x=500, y=550)

        self.textbox_text.insert(
            END,
            "Product ID has reached upto:" + str(id) + " in the database.\n")

    #get values  from the entry
    def addProduct(self, *args, **kwargs):
        self.product_name = self.entry_product_name.get()

        self.number_of_stocks = self.entry_number_of_stocks.get()

        self.cost_price = self.entry_cost_price.get()

        self.vender_name = self.entry_vender_name.get()

        self.vender_phone = self.entry_vender_phone.get()

        self.manufacture_date = self.entry_manufacture_date.get()

        self.expiry_date = self.entry_expiry_date.get()

        self.maximum_retail_price = self.entry_maximum_retail_price.get()

        self.marked_price = self.entry_marked_price.get()

        self.remarks = self.entry_remarks.get()

        if self.product_name != '' and self.number_of_stocks != '' and self.cost_price != '' and self.vender_name != '' and self.vender_phone != '' and self.manufacture_date != '' and self.expiry_date != '' and self.maximum_retail_price != '' and self.marked_price != '':
            sql = "INSERT INTO product_details(product_name,number_of_stocks,cost_price,vender_name,vender_phone,manufacture_date, expiry_date,maximum_retail_price, marked_price,remarks,added_date) VALUES(?,?,?,?,?,?,?,?,?,?,?)"
            c.execute(
                sql,
                (self.product_name, self.number_of_stocks, self.cost_price,
                 self.vender_name, self.vender_phone, self.manufacture_date,
                 self.expiry_date, self.maximum_retail_price,
                 self.marked_price, self.remarks, date))
            conn.commit()

            self.textbox_text.insert(
                END, "\n Inserted! " + str(self.product_name) +
                " into the database")
            tkinter.messagebox.showinfo(
                "Success!",
                "Successfully!!!\nThe Product Details are \nSaved in Database!!!"
            )
        else:
            tkinter.messagebox.showinfo(
                "Error!", "Please Fill All Fields\n All Fields are Required")
            # to clear the fields
        self.entry_product_id.delete(0, END)
        self.entry_product_name.delete(0, END)
        self.entry_number_of_stocks.delete(0, END)
        self.entry_cost_price.delete(0, END)
        self.entry_vender_name.delete(0, END)
        self.entry_vender_phone.delete(0, END)
        self.entry_manufacture_date.delete(0, END)
        self.entry_expiry_date.delete(0, END)
        self.entry_maximum_retail_price.delete(0, END)
        self.entry_marked_price.delete(0, END)
        self.entry_remarks.delete(0, END)

    def searchProduct(self, *args, **kwargs):
        # to clear the fields

        self.entry_product_name.delete(0, END)
        self.entry_number_of_stocks.delete(0, END)
        self.entry_cost_price.delete(0, END)
        self.entry_vender_name.delete(0, END)
        self.entry_vender_phone.delete(0, END)
        self.entry_manufacture_date.delete(0, END)
        self.entry_expiry_date.delete(0, END)
        self.entry_maximum_retail_price.delete(0, END)
        self.entry_marked_price.delete(0, END)
        self.entry_remarks.delete(0, END)

        sql = "SELECT product_id FROM product_details"
        self.result = c.execute(sql).fetchall()
        if self.entry_product_id.get() != '' and [
                self.result for self.result in self.result
                if self.result[0] == int(self.entry_product_id.get())
        ]:
            sql = "SELECT * FROM product_details WHERE product_id=?"
            result = c.execute(
                sql,
                (self.entry_product_id.get()),
            )
            for r in result:
                self.r1 = r[1]
                self.r2 = r[2]
                self.r3 = r[3]
                self.r4 = r[4]
                self.r5 = r[5]
                self.r6 = r[6]
                self.r7 = r[7]
                self.r8 = r[8]
                self.r9 = r[9]
                self.r10 = r[10]
            conn.commit()

            # deleting previous value and getting  new values to the entry fields
            self.entry_product_name.insert(0, str(self.r1))
            self.entry_number_of_stocks.delete(0, END)
            self.entry_number_of_stocks.insert(0, str(self.r2))
            self.entry_cost_price.delete(0, END)
            self.entry_cost_price.insert(0, str(self.r3))
            self.entry_vender_name.delete(0, END)
            self.entry_vender_name.insert(0, str(self.r4))
            self.entry_vender_phone.delete(0, END)
            self.entry_vender_phone.insert(0, str(self.r5))
            self.entry_manufacture_date.delete(0, END)
            self.entry_manufacture_date.insert(0, str(self.r6))
            self.entry_expiry_date.delete(0, END)
            self.entry_expiry_date.insert(0, str(self.r7))
            self.entry_maximum_retail_price.delete(0, END)
            self.entry_maximum_retail_price.insert(0, str(self.r8))

            self.entry_marked_price.delete(0, END)
            self.entry_marked_price.insert(0, str(self.r9))
            self.entry_remarks.delete(0, END)
            self.entry_remarks.insert(0, str(self.r10))
            self.textbox_text.insert(
                END, "\n Searched!,\tProduct with id " +
                self.entry_product_id.get() + " in the database")
        else:
            self.entry_product_id.delete(0, END)
            tkinter.messagebox.showinfo(
                "Error!",
                "Wrong Product Id Format.\nProduct Id Format:Number.\nEnter  Correct Product Id."
            )

    #get values  from the entry

    def updateProduct(self, *args, **kwargs):
        self.product_name = self.entry_product_name.get()

        self.number_of_stocks = self.entry_number_of_stocks.get()

        self.cost_price = self.entry_cost_price.get()

        self.vender_name = self.entry_vender_name.get()

        self.vender_phone = self.entry_vender_phone.get()

        self.manufacture_date = self.entry_manufacture_date.get()

        self.expiry_date = self.entry_expiry_date.get()

        self.maximum_retail_price = self.entry_maximum_retail_price.get()

        self.marked_price = self.entry_marked_price.get()

        self.remarks = self.entry_remarks.get()
        if self.product_name != '' and self.number_of_stocks != '' and self.cost_price != '' and self.vender_name != '' and self.vender_phone != '' and self.manufacture_date != '' and self.expiry_date != '' and self.maximum_retail_price != '' and self.marked_price != '':
            self.u1 = self.entry_product_name.get()
            self.u2 = self.entry_number_of_stocks.get()
            self.u3 = self.entry_cost_price.get()
            self.u4 = self.entry_vender_name.get()
            self.u5 = self.entry_vender_phone.get()
            self.u6 = self.entry_manufacture_date.get()
            self.u7 = self.entry_expiry_date.get()
            self.u8 = self.entry_maximum_retail_price.get()
            self.u9 = self.entry_marked_price.get()
            self.u10 = self.entry_remarks.get()

            sql = "UPDATE  product_details SET product_name=?,number_of_stocks=?,cost_price=?,vender_name=?,vender_phone=?,manufacture_date=?,expiry_date=?,maximum_retail_price=?,marked_price=?,remarks=?, modified_date =? WHERE product_id=?"
            c.execute(sql, (self.u1, self.u2, self.u3, self.u4, self.u5,
                            self.u6, self.u7, self.u8, self.u9, self.u10, date,
                            self.entry_product_id.get()))
            self.textbox_text.insert(
                END, "\n Updated!, " + str(self.u1) + " into the database")
            tkinter.messagebox.showinfo(
                "Success!",
                "Successfully!!!\nThe Product Details are\nUpdated in Database!!!"
            )
            conn.commit()

        else:
            tkinter.messagebox.showinfo(
                "Error!",
                "Product Before Updating.\nProduct Searching Required.")

        # to clear the fields
        self.entry_product_id.delete(0, END)
        self.entry_product_name.delete(0, END)
        self.entry_number_of_stocks.delete(0, END)
        self.entry_cost_price.delete(0, END)
        self.entry_vender_name.delete(0, END)
        self.entry_vender_phone.delete(0, END)
        self.entry_manufacture_date.delete(0, END)
        self.entry_expiry_date.delete(0, END)
        self.entry_maximum_retail_price.delete(0, END)
        self.entry_marked_price.delete(0, END)
        self.entry_remarks.delete(0, END)

        # to delete the product delete
    def deleteProduct(self, *args, **kwargs):
        sql = "SELECT product_id FROM product_details"
        self.result = c.execute(sql).fetchall()

        if self.entry_product_id.get() != '' and [
                self.result for self.result in self.result
                if self.result[0] == int(self.entry_product_id.get())
        ]:
            sql = "DELETE FROM  product_details WHERE product_id=?"
            c.execute(sql, (self.entry_product_id.get(), ))
            self.textbox_text.insert(
                END, "\n Deleted!\tproduct with id " +
                self.entry_product_id.get() + " from the database")
            tkinter.messagebox.showinfo(
                "Success!,",
                "Successfully!!!\nThe Product Details are\nDeleted form Database!!!"
            )
            conn.commit()

        else:
            tkinter.messagebox.showinfo(
                "Error!",
                "Product Before Deleting.\nProduct Searching Required.")

        # to clear the fields
        self.entry_product_id.delete(0, END)
        self.entry_product_name.delete(0, END)
        self.entry_number_of_stocks.delete(0, END)
        self.entry_cost_price.delete(0, END)
        self.entry_vender_name.delete(0, END)
        self.entry_vender_phone.delete(0, END)
        self.entry_manufacture_date.delete(0, END)
        self.entry_expiry_date.delete(0, END)
        self.entry_maximum_retail_price.delete(0, END)
        self.entry_marked_price.delete(0, END)
        self.entry_remarks.delete(0, END)

    def show_detail(self, *argts, **kwargs):
        self.get_id = self.entry_id.get()
        sql = "SELECT * FROM product_details WHERE  product_id=? "
        c.execute(sql, (self.get_id, ))
        self.rows = c.fetchall()
        self.trv.delete(*self.trv.get_children())
        if len(self.rows) != 0:

            self.i = 0
            for row in self.rows:
                if row[2] < 5:
                    self.trv.insert('',
                                    self.i,
                                    text='',
                                    values=(row[0], row[1] + ('(!)'), row[2],
                                            row[3], row[4], row[5], row[6],
                                            row[7], row[8], row[9], row[10]))
                self.i += 1
            else:
                tkinter.messagebox.showinfo(
                    "Error!",
                    "No Such Product Found in database.\nEnter correct product_id..."
                )

        conn.commit()

    def show_detailAll(self, *argts, **kwargs):
        self.entry_id.delete(0, END)
        sql = "SELECT * FROM product_details "
        c.execute(sql)
        self.rows = c.fetchall()
        self.trv.delete(*self.trv.get_children())
        if len(self.rows) != 0:

            self.i = 0
            for row in self.rows:

                if row[2] < 5:
                    self.trv.insert('',
                                    self.i,
                                    text='',
                                    values=(row[0], row[1] + ('(!)'), row[2],
                                            row[3], row[4], row[5], row[6],
                                            row[7], row[8], row[9], row[10]))
                else:
                    self.trv.insert('',
                                    self.i,
                                    text='',
                                    values=(row[0], row[1], row[2], row[3],
                                            row[4], row[5], row[6], row[7],
                                            row[8], row[9], row[10]))
                self.i += 1

        conn.commit()
Esempio n. 11
0
class View_appointment:
    def __init__(self, user_info,window, appoint_function, previous_function, next_function, delete_function):
        self.window = window
        self.user_info = user_info
        self.app_appoint = None

        # event handlers
        self.appoint = appoint_function
        self.previous = previous_function
        self.next = next_function
        self.delete = delete_function

        # frame
        self.appoint_data_frame = tk.Frame(master=self.window, relief=tk.RAISED, borderwidth=1)
        self.appoint_data_frame.grid(row=1, column=1, padx=5, pady=5)

        self.buttons_frame = tk.Frame(master=self.window, relief=tk.RAISED, borderwidth=1)
        self.buttons_frame.grid(row=3, column=1, padx=5, pady=5)

        # Textboxes & their labels
        self.label_uid = tk.Label(master=self.appoint_data_frame, text="User ID:")
        self.label_uid.grid(row=1, column=1, sticky="w")

        self.e_uid = tk.StringVar()
        self.txt_uid = tk.Entry(master=self.appoint_data_frame, textvariable=self.e_uid,width=50)
        self.txt_uid.grid(row=1, column=2)
        self.e_uid.set(user_info[0])
        self.txt_uid.configure(state='disabled')

        self.label_uname = tk.Label(master=self.appoint_data_frame, text="User Name:")
        self.label_uname.grid(row=2, column=1, sticky="w")

        self.e_uname = tk.StringVar()
        self.txt_uname = tk.Entry(master=self.appoint_data_frame,textvariable=self.e_uname, width=50)
        self.txt_uname.grid(row=2, column=2)
        self.e_uname.set(user_info[1])
        self.txt_uname.configure(state='disabled')

        self.label_date = tk.Label(text="Appointment Date:", master=self.appoint_data_frame)
        self.label_date.grid(row=3, column=1, sticky="w")

        self.txt_date = DateEntry(master=self.appoint_data_frame, width=12, year=2020, month=9, day=22,background='darkblue', foreground='white', borderwidth=2)
        #self.txt_date.pack(padx=10, pady=10)
        self.txt_date.grid(row=3, column=2)


        self.label_time = tk.Label(text="Appointment Time:", master=self.appoint_data_frame)
        self.label_time.grid(row=4, column=1, sticky="w")

        self.txt_time = ttk.Combobox(master=self.appoint_data_frame)
        self.txt_time['value'] = ('10:00am', '10:15am', '10:30am', '10:45am',
                                  '11:00am', '11:15am', '11:30am', '11:45am',
                                  '12:00pm', '12:15pm', '12:30pm', '12:45pm',
                                  '1:00pm', '1:15pm', '1:30pm', '1:45pm',
                                  '2:00pm', '2:15pm', '2:30pm', '2:45pm')
        self.txt_time.current(0)
        self.txt_time.grid(row=4, column=2)

        self.label_doctor = tk.Label(text="Doctor Name:", master=self.appoint_data_frame)
        self.label_doctor.grid(row=5, column=1, sticky="w")

        self.txt_doctor = ttk.Combobox(master=self.appoint_data_frame)
        self.txt_doctor['value'] = ('Andy', 'Charlie')
        self.txt_doctor.current(0)
        self.txt_doctor.grid(row=5, column=2)

        # ----- Buttons -----
        self.button_previous = tk.Button(text="Previous", width=12, master=self.buttons_frame)
        self.button_previous.bind("<ButtonRelease-1>", self._handle_previous)
        self.button_previous.grid(row=1, column=1)

        self.button_next = tk.Button(text="Next", width=12, master=self.buttons_frame)
        self.button_next.bind("<ButtonRelease-1>", self._handle_next)
        self.button_next.grid(row=1, column=2)

        self.button_update = tk.Button(text="Appointment", width=12, master=self.buttons_frame)
        self.button_update.bind("<ButtonRelease-1>", self._handle_appointment)
        self.button_update.grid(row=1, column=3)

        self.button_delete = tk.Button(text="Delete", width=12, master=self.buttons_frame)
        self.button_delete.bind("<ButtonRelease-1>", self._handle_delete)
        self.button_delete.grid(row=1, column=5)

    def switch_to_appointment(self, apponintment=None):
        if apponintment is None:
            # todo: should throwing an error not returning
            print("Missing Apponintment")
            return None

        self.app_appoint = apponintment

        self.txt_date.delete(0, tk.END)
        self.txt_date.insert(0, apponintment.date)
        self.txt_time.delete(0, tk.END)
        self.txt_time.insert(0, apponintment.time)
        self.txt_doctor.delete(0, tk.END)
        self.txt_doctor.insert(0, apponintment.d_name)

    def _handle_appointment(self, _):
        ck_appoint = True

        if self._validate():
            app_appoint = self.get_appoint()
            self.appoint(app_appoint)
        else:
            ck_appoint = False

        return ck_appoint

    def _handle_previous(self, _):
        app_appoint = self.get_appoint()
        self.previous(app_appoint)

    def _handle_next(self, _):
        app_appoint = self.get_appoint()
        self.next(app_appoint)

    def _handle_delete(self, _):
        app_appoint = self.get_appoint()
        self.delete(app_appoint)

    def _validate(self):
        validity = True

        if len(self.txt_uname.get().strip()) == 0:
            self.txt_uname.configure(bg="#FF8786")
            self.txt_uname.insert(0, "Missing User Name!")
            validity = False
        else:
            self.txt_uname.configure(bg="#FFFFFF")

        return validity

    def get_appoint(self):
        app_appoint = App_Appoint(
            userid=self.txt_uid.get(),
            date=self.txt_date.get().strip(),
            time=self.txt_time.get().strip(),
            doctorname=self.txt_doctor.get().strip()
        )
        return app_appoint
    def __init__(self, root, connection, master):
        """FormNewRepair init."""
        super().__init__(root=root, connection=connection)
        self.root.state('zoomed')
        self.master = master
        self.root['bg'] = 'black'
        self.client_selected = tk.StringVar()
        self.vehicle_selected = tk.StringVar()
        self.client_id = tk.StringVar()
        self.name = tk.StringVar()
        self.last_name = tk.StringVar()
        self.identity_card = tk.StringVar()
        self.email = tk.StringVar()
        self.phone_1 = tk.StringVar()
        self.phone_2 = tk.StringVar()
        self.address = tk.StringVar()
        self.vehicle_id = tk.StringVar()
        self.vehicle_identity = tk.StringVar()
        self.color = tk.StringVar()
        self.brand = tk.StringVar()
        self.model = tk.StringVar()
        self.year = tk.StringVar()
        self.status_selected = tk.StringVar()
        self.mileage = tk.StringVar()
        self.client_obs = tk.StringVar()
        self.mechanical_obs = tk.StringVar()
        self.final_obs = tk.StringVar()
        self.price = tk.StringVar()
        self.date_entry = tk.StringVar()
        self.date_exit = tk.StringVar()

        # Frame Search clients
        frame_search_client = tk.LabelFrame(self.root,
                                            text="Buscar cliente",
                                            bg="black",
                                            foreground="white",
                                            font='Helvetica 12 bold')
        frame_search_client.pack(side="top", padx=5, pady=5, fill='x')

        self.client_selected.trace_add("write", self.callback_client)
        self.client_chosen = ttk.Combobox(frame_search_client,
                                          width=20,
                                          font='Helvetica 12 bold',
                                          state="readonly",
                                          textvariable=self.client_selected)
        self.client_chosen["values"] = self.get_clients()
        self.client_chosen.pack(side="top",
                                padx=5,
                                pady=5,
                                fill='x',
                                expand=True)

        # Frame Details Clients
        frame_details_client = tk.LabelFrame(self.root,
                                             text="Datos del cliente",
                                             bg="black",
                                             foreground="white",
                                             font='Helvetica 12 bold')
        frame_details_client.pack(side="top", padx=5, pady=5, fill='x')

        frame_details_client_1 = tk.Frame(frame_details_client, bg="black")
        frame_details_client_1.pack(side="top", fill='x')

        frame_details_client_2 = tk.Frame(frame_details_client_1, bg="black")
        frame_details_client_2.pack(side="left", fill='x', expand=True)

        frame_details_client_3 = tk.Frame(frame_details_client_1, bg="black")
        frame_details_client_3.pack(side="left", fill='x', expand=True)

        frame_details_client_4 = tk.Frame(frame_details_client_1, bg="black")
        frame_details_client_4.pack(side="left", fill='x', expand=True)

        frame_details_client_5 = tk.Frame(frame_details_client_1, bg="black")
        frame_details_client_5.pack(side="left", fill='x', expand=True)

        frame_details_client_6 = tk.Frame(frame_details_client, bg="black")
        frame_details_client_6.pack(side="top", fill='x')

        frame_details_client_7 = tk.Frame(frame_details_client_6, bg="black")
        frame_details_client_7.pack(side="left", fill='x')

        frame_details_client_8 = tk.Frame(frame_details_client_6, bg="black")
        frame_details_client_8.pack(side="left", fill='x', expand=True)

        name_label = tk.Label(frame_details_client_2,
                              text="Nombre",
                              font='Helvetica 12 bold',
                              anchor='w',
                              foreground="gold2",
                              bg="black")
        name_label.pack(padx=5, pady=5, fill='both')
        name_entry = tk.Entry(frame_details_client_3,
                              font="Helvetica 12",
                              textvariable=self.name)
        name_entry.config(state='readonly')
        name_entry.pack(padx=5, pady=5, fill='both')

        last_name_label = tk.Label(frame_details_client_4,
                                   text="Apellido",
                                   font='Helvetica 12 bold',
                                   anchor='w',
                                   foreground="gold2",
                                   bg="black")
        last_name_label.pack(padx=5, pady=5, fill='both')
        last_name_entry = tk.Entry(frame_details_client_5,
                                   font="Helvetica 12",
                                   textvariable=self.last_name)
        last_name_entry.config(state='readonly')
        last_name_entry.pack(padx=5, pady=5, fill='both')

        identity_card_label = tk.Label(frame_details_client_2,
                                       text="Cedula",
                                       font='Helvetica 12 bold',
                                       anchor='w',
                                       foreground="gold2",
                                       bg="black")
        identity_card_label.pack(padx=5, pady=5, fill='both')
        identity_card_entry = tk.Entry(frame_details_client_3,
                                       font="Helvetica 12",
                                       textvariable=self.identity_card)
        identity_card_entry.config(state='readonly')
        identity_card_entry.pack(padx=5, pady=5, fill='both')

        email_label = tk.Label(frame_details_client_4,
                               text="Email",
                               font='Helvetica 12 bold',
                               anchor='w',
                               foreground="gold2",
                               bg="black")
        email_label.pack(padx=5, pady=5, fill='both')
        email_entry = tk.Entry(frame_details_client_5,
                               font="Helvetica 12",
                               textvariable=self.email)
        email_entry.config(state='readonly')
        email_entry.pack(padx=5, pady=5, fill='both')

        phone_1_label = tk.Label(frame_details_client_2,
                                 text="Telefono fijo",
                                 font='Helvetica 12 bold',
                                 anchor='w',
                                 foreground="gold2",
                                 bg="black")
        phone_1_label.pack(padx=5, pady=5, fill='both')
        phone_1_entry = tk.Entry(frame_details_client_3,
                                 font="Helvetica 12",
                                 textvariable=self.phone_1)
        phone_1_entry.config(state='readonly')
        phone_1_entry.pack(padx=5, pady=5, fill='both')

        phone_2_label = tk.Label(frame_details_client_4,
                                 text="Celular",
                                 font='Helvetica 12 bold',
                                 anchor='w',
                                 foreground="gold2",
                                 bg="black")
        phone_2_label.pack(padx=5, pady=5, fill='both')
        phone_2_entry = tk.Entry(frame_details_client_5,
                                 font="Helvetica 12",
                                 textvariable=self.phone_2)
        phone_2_entry.config(state='readonly')
        phone_2_entry.pack(padx=5, pady=5, fill='both')

        address_label = tk.Label(frame_details_client_7,
                                 text="Direccion",
                                 font='Helvetica 12 bold',
                                 anchor='w',
                                 foreground="gold2",
                                 bg="black")
        address_label.pack(padx=5, pady=5, fill='both')
        address_entry = tk.Entry(frame_details_client_8,
                                 font="Helvetica 12",
                                 textvariable=self.address)
        address_entry.config(state='readonly')
        address_entry.pack(padx=5, pady=5, fill='both')

        # Frame Search vehicle
        frame_search_vehicle = tk.LabelFrame(self.root,
                                             text="Buscar vehiculo",
                                             bg="black",
                                             foreground="white",
                                             font='Helvetica 12 bold')
        frame_search_vehicle.pack(side="top", padx=5, pady=5, fill='x')

        self.vehicle_selected.trace_add("write", self.callback_vehicle)
        self.vehicle_chosen = ttk.Combobox(frame_search_vehicle,
                                           width=20,
                                           font='Helvetica 12 bold',
                                           state="readonly",
                                           textvariable=self.vehicle_selected)
        self.vehicle_chosen.pack(side="top",
                                 padx=5,
                                 pady=5,
                                 fill='x',
                                 expand=True)

        # Frame Vehicle details
        frame_details_vehicle = tk.LabelFrame(self.root,
                                              text="Datos del vehiculo",
                                              bg="black",
                                              foreground="white",
                                              font='Helvetica 12 bold')
        frame_details_vehicle.pack(side="top", padx=5, pady=5, fill='x')

        frame_details_vehicle_1 = tk.Frame(frame_details_vehicle, bg="black")
        frame_details_vehicle_1.pack(side="left",
                                     fill='both',
                                     padx=5,
                                     pady=5,
                                     expand=True)

        frame_details_vehicle_2 = tk.Frame(frame_details_vehicle, bg="black")
        frame_details_vehicle_2.pack(side="left",
                                     fill='both',
                                     padx=5,
                                     pady=5,
                                     expand=True)

        frame_details_vehicle_3 = tk.Frame(frame_details_vehicle, bg="black")
        frame_details_vehicle_3.pack(side="left",
                                     fill='both',
                                     padx=5,
                                     pady=5,
                                     expand=True)

        frame_details_vehicle_4 = tk.Frame(frame_details_vehicle, bg="black")
        frame_details_vehicle_4.pack(side="left",
                                     fill='both',
                                     padx=5,
                                     pady=5,
                                     expand=True)

        self.vehicle_identity.trace_add("write", self.callback_vehicle)
        self.color.trace_add("write", self.callback_vehicle)
        self.brand.trace_add("write", self.callback_vehicle)
        self.model.trace_add("write", self.callback_vehicle)
        self.year.trace_add("write", self.callback_vehicle)

        vehicle_identity_label = tk.Label(frame_details_vehicle_1,
                                          text="Placa",
                                          font='Helvetica 12 bold',
                                          anchor='w',
                                          foreground="gold2",
                                          bg="black")
        vehicle_identity_label.pack(padx=5, pady=5, fill='both')
        vehicle_identity_entry = tk.Entry(frame_details_vehicle_2,
                                          font="Helvetica 12",
                                          textvariable=self.vehicle_identity)
        vehicle_identity_entry.config(state='readonly')
        vehicle_identity_entry.pack(padx=5, pady=5, fill='both')

        color_label = tk.Label(frame_details_vehicle_3,
                               text="Color",
                               font='Helvetica 12 bold',
                               anchor='w',
                               foreground="gold2",
                               bg="black")
        color_label.pack(padx=5, pady=5, fill='both')
        color_entry = tk.Entry(frame_details_vehicle_4,
                               font="Helvetica 12",
                               textvariable=self.color)
        color_entry.config(state='readonly')
        color_entry.pack(padx=5, pady=5, fill='both')

        vehicle_type_label = tk.Label(frame_details_vehicle_1,
                                      text="Tipo de Vehiculo",
                                      font='Helvetica 12 bold',
                                      anchor='w')
        vehicle_type_label.pack(padx=5, pady=5, fill='both')

        brand_entry = tk.Entry(frame_details_vehicle_2,
                               font="Helvetica 12",
                               textvariable=self.brand)
        brand_entry.config(state='readonly')
        brand_entry.pack(padx=5, pady=5, fill='both')

        model_entry = tk.Entry(frame_details_vehicle_3,
                               font="Helvetica 12",
                               textvariable=self.model)
        model_entry.config(state='readonly')
        model_entry.pack(padx=5, pady=5, fill='both')

        year_entry = tk.Entry(frame_details_vehicle_4,
                              font="Helvetica 12",
                              textvariable=self.year)
        year_entry.config(state='readonly')
        year_entry.pack(padx=5, pady=5, fill='both')

        mileage_label = tk.Label(frame_details_vehicle_1,
                                 text="Kilometraje",
                                 font='Helvetica 12 bold',
                                 anchor='w',
                                 foreground="gold2",
                                 bg="black")
        mileage_label.pack(padx=5, pady=5, fill='both')
        mileage_entry = tk.Entry(frame_details_vehicle_2,
                                 font="Helvetica 12",
                                 textvariable=self.mileage)
        mileage_entry.pack(padx=5, pady=5, fill='both')

        # Repair details
        frame_details_repair = tk.LabelFrame(self.root,
                                             text="Detalles de la Reparación",
                                             foreground="white",
                                             font='Helvetica 12 bold',
                                             bg="black")
        frame_details_repair.pack(side="top", padx=5, pady=5, fill='both')

        frame_details_repair_1 = tk.Frame(frame_details_repair, bg="black")
        frame_details_repair_1.pack(side="top", fill='x', expand=True)

        frame_details_repair_1_a = tk.Frame(frame_details_repair_1, bg="black")
        frame_details_repair_1_a.pack(side="left",
                                      padx=5,
                                      pady=5,
                                      fill='x',
                                      expand=True)
        frame_details_repair_1_a_a = tk.Frame(frame_details_repair_1_a,
                                              bg="black")
        frame_details_repair_1_a_a.pack(side="top", fill='x', expand=True)

        frame_details_repair_1_b = tk.Frame(frame_details_repair_1, bg="black")
        frame_details_repair_1_b.pack(side="left", fill='x', expand=True)
        frame_details_repair_1_b_a = tk.Frame(frame_details_repair_1_b,
                                              bg="black")
        frame_details_repair_1_b_a.pack(side="top", fill='x', expand=True)

        frame_details_repair_2 = tk.Frame(frame_details_repair, bg="black")
        frame_details_repair_2.pack(side="top", fill='x', expand=True)

        frame_details_repair_2_a = tk.Frame(frame_details_repair_2, bg="black")
        frame_details_repair_2_a.pack(side="left", fill='x', expand=True)
        frame_details_repair_2_a_a = tk.Frame(frame_details_repair_2_a,
                                              bg="black")
        frame_details_repair_2_a_a.pack(side="top",
                                        padx=5,
                                        pady=5,
                                        fill='x',
                                        expand=True)

        frame_details_repair_2_b = tk.Frame(frame_details_repair_2, bg="black")
        frame_details_repair_2_b.pack(side="left", fill='x', expand=True)
        frame_details_repair_2_b_a = tk.Frame(frame_details_repair_2_b,
                                              bg="black")
        frame_details_repair_2_b_a.pack(side="top", fill='x', expand=True)

        frame_details_repair_3 = tk.Frame(frame_details_repair, bg="black")
        frame_details_repair_3.pack(side="top", fill='x', expand=True)

        frame_details_repair_3_a = tk.Frame(frame_details_repair_3, bg="black")
        frame_details_repair_3_a.pack(side="left",
                                      padx=5,
                                      pady=5,
                                      fill='x',
                                      expand=True)

        # Date Entry
        date_entry_label = tk.Label(frame_details_repair_1_a_a,
                                    text="Fecha de entrada:",
                                    font='Helvetica 12 bold',
                                    anchor='w',
                                    foreground="gold2",
                                    bg="black")
        date_entry_label.pack(side="left", padx=5, pady=5, fill='x')
        date_entry = DateEntry(frame_details_repair_1_a_a,
                               width=10,
                               background='darkblue',
                               foreground='white',
                               borderwidth=1,
                               date_pattern='dd/mm/y',
                               font='Helvetica 12 bold',
                               textvariable=self.date_entry)
        date_entry.pack(side="left", padx=5, pady=5, fill='x')

        # Client observations
        client_obs_label = tk.Label(frame_details_repair_1_a,
                                    text="Observaciones del Cliente:",
                                    font='Helvetica 12 bold',
                                    anchor='w',
                                    foreground="gold2",
                                    bg="black")
        client_obs_label.pack(side="top", fill='x', expand=True)
        self.client_obs = tk.Text(frame_details_repair_1_a, height=4)
        self.client_obs.pack(side="left", fill="x", expand=True)
        scrollbar_client = tk.Scrollbar(frame_details_repair_1_a)
        scrollbar_client.pack(side="left", fill="y")
        scrollbar_client.config(command=self.client_obs.yview)
        self.client_obs.config(yscrollcommand=scrollbar_client.set)

        # Status
        status_label = tk.Label(frame_details_repair_2_a_a,
                                text="Estado:",
                                font='Helvetica 12 bold',
                                anchor='w',
                                foreground="gold2",
                                bg="black")
        status_label.pack(side="left", padx=5, pady=5, fill='x')
        self.status_chosen = ttk.Combobox(frame_details_repair_2_a_a,
                                          width=12,
                                          font='Helvetica 12 bold',
                                          state="readonly",
                                          textvariable=self.status_selected)
        self.status_chosen["values"] = ["EN TALLER"]
        self.status_chosen.current(0)
        self.status_chosen.pack(side="left", padx=5, pady=5, fill='x')

        # Date Exit
        date_exit_label = tk.Label(frame_details_repair_1_b_a,
                                   text="Fecha de salida:",
                                   font='Helvetica 12 bold',
                                   anchor='w',
                                   foreground="gold2",
                                   bg="black")
        date_exit_label.pack(side="left", padx=5, pady=5, fill='x')
        date_exit = DateEntry(frame_details_repair_1_b_a,
                              width=10,
                              background='darkblue',
                              foreground='white',
                              borderwidth=1,
                              date_pattern='dd/mm/y',
                              font='Helvetica 12 bold',
                              textvariable=self.date_exit)
        date_exit.delete(0, "end")
        date_exit.config(state="disabled")
        date_exit.pack(side="left", padx=5, pady=5, fill='x')

        # Mechanical observations
        mechanical_obs_label = tk.Label(frame_details_repair_1_b,
                                        text="Observaciones del Mecánico:",
                                        font='Helvetica 12 bold',
                                        anchor='w',
                                        foreground="gold2",
                                        bg="black")
        mechanical_obs_label.pack(side="top", fill='x', expand=True)
        scrollbar_mechanical = tk.Scrollbar(frame_details_repair_1_b)
        self.mechanical_obs = tk.Text(frame_details_repair_1_b, height=4)
        self.mechanical_obs.pack(side="left", fill="x", expand=True)
        scrollbar_mechanical.pack(side="left", fill="y")
        scrollbar_mechanical.config(command=self.mechanical_obs.yview)
        self.mechanical_obs.config(yscrollcommand=scrollbar_mechanical.set)

        # Price
        price_label = tk.Label(frame_details_repair_2_b_a,
                               text="Precio:",
                               font='Helvetica 12 bold',
                               foreground="gold2",
                               bg="black")
        price_label.pack(side="left", padx=5, pady=5)
        price_entry = tk.Entry(frame_details_repair_2_b_a,
                               font="Helvetica 12 bold",
                               textvariable=self.price)
        price_entry.pack(side="left", padx=5, pady=5, fill='x', expand=True)

        # Final observations
        final_obs_label = tk.Label(frame_details_repair_3_a,
                                   text="Observación final:",
                                   font='Helvetica 12 bold',
                                   anchor='w',
                                   foreground="gold2",
                                   bg="black")
        final_obs_label.pack(side="top", fill='x', expand=True)
        self.final_obs = tk.Text(frame_details_repair_3_a, height=3)
        self.final_obs.configure(state='disabled')
        self.final_obs.pack(side="left", fill="x", expand=True)
        scrollbar_final = tk.Scrollbar(frame_details_repair_3_a)
        scrollbar_final.pack(side="left", fill="y")
        scrollbar_final.config(command=self.client_obs.yview)
        self.final_obs.config(yscrollcommand=scrollbar_client.set)

        # Buttons
        frame_buttons = tk.Frame(self.root, bg="black")
        frame_buttons.pack(side="bottom", fill='x')

        button_1 = tk.Button(frame_buttons,
                             text="Crear",
                             font='Helvetica 12 bold',
                             width=15,
                             bg="gold2",
                             command=self.create_repair)
        button_1.pack(side='right', fil='x', padx=5, pady=5)

        button_2 = tk.Button(frame_buttons,
                             text="Regresar",
                             font='Helvetica 12 bold',
                             width=15,
                             bg="gold2",
                             command=self.go_back)
        button_2.pack(side='right', fil='x', padx=5, pady=5)

        self.root.mainloop()
class staff():
    def __init__(self, master):
        self.master = master

        self.master.resizable(0, 0)
        self.master.geometry('1080x540+260+140')
        self.master.title("Staff Member Info")
        self.master.configure(background="#d9d9d9")

        self.widgets()

    def widgets(self):

        font15 = "-family Arial -size 12 -weight bold -slant roman " \
                 "-underline 0 -overstrike 0"
        font16 = "-family Arial -size 18 -weight bold -slant roman " \
                 "-underline 0 -overstrike 0"
        font9 = "-family Arial -size 20 -weight bold -slant roman " \
                "-underline 0 -overstrike 0"

        self.Label1 = Label(self.master)
        self.Label1.place(relx=0.0, rely=0.018, height=51, width=284)
        self.Label1.configure(background="#d9d9d9")
        self.Label1.configure(disabledforeground="#a3a3a3")
        self.Label1.configure(font=font9)
        self.Label1.configure(foreground="#000000")
        self.Label1.configure(text='''Staff Member Info''')
        self.Label1.configure(width=284)

        self.TSeparator1 = ttk.Separator(self.master)
        self.TSeparator1.place(relx=0.037, rely=0.107, relwidth=0.935)

        self.name = Label(self.master)
        self.name.place(relx=0.046, rely=0.179, height=31, width=84)
        self.name.configure(background="#d9d9d9")
        self.name.configure(disabledforeground="#a3a3a3")
        self.name.configure(font=font15)
        self.name.configure(foreground="#000000")
        self.name.configure(text='''Name :''')
        self.name.configure(width=84)

        self.name_entry = Entry(self.master)
        self.name_entry.place(relx=0.176,
                              rely=0.196,
                              height=20,
                              relwidth=0.152)
        self.name_entry.configure(background="white")
        self.name_entry.configure(disabledforeground="#a3a3a3")
        self.name_entry.configure(font="TkFixedFont")
        self.name_entry.configure(foreground="#000000")
        self.name_entry.configure(insertbackground="black")

        self.gender = Label(self.master)
        self.gender.place(relx=0.046, rely=0.304, height=31, width=84)
        self.gender.configure(activebackground="#f9f9f9")
        self.gender.configure(activeforeground="black")
        self.gender.configure(background="#d9d9d9")
        self.gender.configure(disabledforeground="#a3a3a3")
        self.gender.configure(font=font15)
        self.gender.configure(foreground="#000000")
        self.gender.configure(highlightbackground="#d9d9d9")
        self.gender.configure(highlightcolor="black")
        self.gender.configure(text='''Gender :''')
        self.gender.configure(width=84)

        self.gender_v = StringVar()
        self.gender_rm = Radiobutton(self.master,
                                     value="Male",
                                     variable=self.gender_v,
                                     text="Male",
                                     bg='#d9d9d9',
                                     activebackground='#d9d9d9').place(
                                         relx=0.176,
                                         rely=0.313,
                                         relheight=0.045,
                                         relwidth=0.05)
        self.gender_rf = Radiobutton(self.master,
                                     value="Female",
                                     variable=self.gender_v,
                                     text="Female",
                                     bg='#d9d9d9',
                                     activebackground='#d9d9d9').place(
                                         relx=0.241,
                                         rely=0.313,
                                         relheight=0.045,
                                         relwidth=0.05)

        self.dob = Label(self.master)
        self.dob.place(relx=0.046, rely=0.571, height=31, width=84)
        self.dob.configure(activebackground="#f9f9f9")
        self.dob.configure(activeforeground="black")
        self.dob.configure(background="#d9d9d9")
        self.dob.configure(disabledforeground="#a3a3a3")
        self.dob.configure(font=font15)
        self.dob.configure(foreground="#000000")
        self.dob.configure(highlightbackground="#d9d9d9")
        self.dob.configure(highlightcolor="black")
        self.dob.configure(text='''D.O.B :''')
        self.dob.configure(width=84)

        self.dob_e = DateEntry(self.master,
                               background='grey',
                               foreground='white',
                               borderwidth=2)
        self.dob_e.place(relx=0.176, rely=0.580, height=20, width=120)

        self.marital_status = Label(self.master)
        self.marital_status.place(relx=0.046, rely=0.429, height=31, width=134)
        self.marital_status.configure(activebackground="#f9f9f9")
        self.marital_status.configure(activeforeground="black")
        self.marital_status.configure(background="#d9d9d9")
        self.marital_status.configure(disabledforeground="#a3a3a3")
        self.marital_status.configure(font=font15)
        self.marital_status.configure(foreground="#000000")
        self.marital_status.configure(highlightbackground="#d9d9d9")
        self.marital_status.configure(highlightcolor="black")
        self.marital_status.configure(text='''Marital Status :''')
        self.marital_status.configure(width=134)

        self.marital_combobox = ttk.Combobox(
            self.master, values=["Single", "Married", "Divorced"])
        self.marital_combobox.current(0)
        self.marital_combobox.place(relx=0.176,
                                    rely=0.444,
                                    height=20,
                                    relwidth=0.152)

        self.Member_id = Label(self.master)
        self.Member_id.place(relx=0.417, rely=0.179, height=31, width=121)
        self.Member_id.configure(activebackground="#f9f9f9")
        self.Member_id.configure(activeforeground="black")
        self.Member_id.configure(background="#d9d9d9")
        self.Member_id.configure(disabledforeground="#a3a3a3")
        self.Member_id.configure(font=font15)
        self.Member_id.configure(foreground="#000000")
        self.Member_id.configure(highlightbackground="#d9d9d9")
        self.Member_id.configure(highlightcolor="black")
        self.Member_id.configure(text='''Staff ID :''')
        self.Member_id.configure(width=121)

        self.phone_number = Label(self.master)
        self.phone_number.place(relx=0.417, rely=0.304, height=36, width=134)
        self.phone_number.configure(activebackground="#f9f9f9")
        self.phone_number.configure(activeforeground="black")
        self.phone_number.configure(background="#d9d9d9")
        self.phone_number.configure(disabledforeground="#a3a3a3")
        self.phone_number.configure(font=font15)
        self.phone_number.configure(foreground="#000000")
        self.phone_number.configure(highlightbackground="#d9d9d9")
        self.phone_number.configure(highlightcolor="black")
        self.phone_number.configure(text='''Phone Number :''')
        self.phone_number.configure(width=134)

        self.adhaar_number = Label(self.master)
        self.adhaar_number.place(relx=0.407, rely=0.429, height=36, width=154)
        self.adhaar_number.configure(activebackground="#f9f9f9")
        self.adhaar_number.configure(activeforeground="black")
        self.adhaar_number.configure(background="#d9d9d9")
        self.adhaar_number.configure(disabledforeground="#a3a3a3")
        self.adhaar_number.configure(font=font15)
        self.adhaar_number.configure(foreground="#000000")
        self.adhaar_number.configure(highlightbackground="#d9d9d9")
        self.adhaar_number.configure(highlightcolor="black")
        self.adhaar_number.configure(text='''Adhaar Number :''')
        self.adhaar_number.configure(width=154)

        self.address = Label(self.master)
        self.address.place(relx=0.407, rely=0.571, height=36, width=184)
        self.address.configure(activebackground="#f9f9f9")
        self.address.configure(activeforeground="black")
        self.address.configure(background="#d9d9d9")
        self.address.configure(disabledforeground="#a3a3a3")
        self.address.configure(font=font15)
        self.address.configure(foreground="#000000")
        self.address.configure(highlightbackground="#d9d9d9")
        self.address.configure(highlightcolor="black")
        self.address.configure(text='''Permanent Address :''')
        self.address.configure(width=184)

        self.ph_number_entry = Entry(self.master)
        self.ph_number_entry.place(relx=0.611,
                                   rely=0.321,
                                   height=20,
                                   relwidth=0.152)
        self.ph_number_entry.configure(background="white")
        self.ph_number_entry.configure(disabledforeground="#a3a3a3")
        self.ph_number_entry.configure(font="TkFixedFont")
        self.ph_number_entry.configure(foreground="#000000")
        self.ph_number_entry.configure(highlightbackground="#d9d9d9")
        self.ph_number_entry.configure(highlightcolor="black")
        self.ph_number_entry.configure(insertbackground="black")
        self.ph_number_entry.configure(selectbackground="#c4c4c4")
        self.ph_number_entry.configure(selectforeground="black")

        self.adhaar_entry = Entry(self.master)
        self.adhaar_entry.place(relx=0.611,
                                rely=0.446,
                                height=20,
                                relwidth=0.152)
        self.adhaar_entry.configure(background="white")
        self.adhaar_entry.configure(disabledforeground="#a3a3a3")
        self.adhaar_entry.configure(font="TkFixedFont")
        self.adhaar_entry.configure(foreground="#000000")
        self.adhaar_entry.configure(highlightbackground="#d9d9d9")
        self.adhaar_entry.configure(highlightcolor="black")
        self.adhaar_entry.configure(insertbackground="black")
        self.adhaar_entry.configure(selectbackground="#c4c4c4")
        self.adhaar_entry.configure(selectforeground="black")

        self.TSeparator2 = ttk.Separator(self.master)
        self.TSeparator2.place(relx=0.037, rely=0.768, relwidth=0.935)

        self.staff_id_entry = Entry(self.master)
        self.staff_id_entry.place(relx=0.611,
                                  rely=0.196,
                                  height=20,
                                  relwidth=0.152)
        self.staff_id_entry.configure(background="white")
        self.staff_id_entry.configure(disabledforeground="#a3a3a3")
        self.staff_id_entry.configure(font="TkFixedFont")
        self.staff_id_entry.configure(foreground="#000000")
        self.staff_id_entry.configure(highlightbackground="#d9d9d9")
        self.staff_id_entry.configure(highlightcolor="black")
        self.staff_id_entry.configure(insertbackground="black")
        self.staff_id_entry.configure(selectbackground="#c4c4c4")
        self.staff_id_entry.configure(selectforeground="black")
        #self.staff_id_entry.insert(END,"Auto Assigned")

        self.search_button = Button(self.master)
        self.search_button.place(relx=0.157, rely=0.786, height=34, width=107)
        self.search_button.configure(activebackground="#ececec")
        self.search_button.configure(activeforeground="#000000")
        self.search_button.configure(background="#d9d9d9")
        self.search_button.configure(disabledforeground="#a3a3a3")
        self.search_button.configure(font=font16)
        self.search_button.configure(foreground="#000000")
        self.search_button.configure(highlightbackground="#d9d9d9")
        self.search_button.configure(highlightcolor="black")
        self.search_button.configure(pady="0")
        self.search_button.configure(text='''Search''')
        self.search_button.configure(width=107)
        self.search_button.configure(command=self.search)

        self.addnew_button = Button(self.master)
        self.addnew_button.place(relx=0.046, rely=0.786, height=34, width=117)
        self.addnew_button.configure(activebackground="#ececec")
        self.addnew_button.configure(activeforeground="#000000")
        self.addnew_button.configure(background="#d9d9d9")
        self.addnew_button.configure(disabledforeground="#a3a3a3")
        self.addnew_button.configure(font=font16)
        self.addnew_button.configure(foreground="#000000")
        self.addnew_button.configure(highlightbackground="#d9d9d9")
        self.addnew_button.configure(highlightcolor="black")
        self.addnew_button.configure(pady="0")
        self.addnew_button.configure(text='''Add New''')
        self.addnew_button.configure(width=117)
        self.addnew_button.configure(command=self.addnew)

        self.update_button = Button(self.master)
        self.update_button.place(relx=0.259, rely=0.786, height=34, width=107)
        self.update_button.configure(activebackground="#ececec")
        self.update_button.configure(activeforeground="#000000")
        self.update_button.configure(background="#d9d9d9")
        self.update_button.configure(disabledforeground="#a3a3a3")
        self.update_button.configure(font=font16)
        self.update_button.configure(foreground="#000000")
        self.update_button.configure(highlightbackground="#d9d9d9")
        self.update_button.configure(highlightcolor="black")
        self.update_button.configure(pady="0")
        self.update_button.configure(text='''Update''')

        self.delete_button = Button(self.master)
        self.delete_button.place(relx=0.361, rely=0.786, height=34, width=107)
        self.delete_button.configure(activebackground="#ececec")
        self.delete_button.configure(activeforeground="#000000")
        self.delete_button.configure(background="#d9d9d9")
        self.delete_button.configure(disabledforeground="#a3a3a3")
        self.delete_button.configure(font=font16)
        self.delete_button.configure(foreground="#000000")
        self.delete_button.configure(highlightbackground="#d9d9d9")
        self.delete_button.configure(highlightcolor="black")
        self.delete_button.configure(pady="0")
        self.delete_button.configure(text='''Delete''')

        self.scroll_frame = Frame(self.master, bg="red")
        self.scroll_frame.place(relx=0.611,
                                rely=0.571,
                                height=35,
                                relwidth=0.152)
        self.scrollbar = Scrollbar(self.scroll_frame, orient="horizontal")
        self.scrolled_entry = Entry(self.scroll_frame,
                                    xscrollcommand=self.scrollbar.set)
        self.scrolled_entry.focus()
        self.scrolled_entry.pack(side="top", fill="x")
        self.scrollbar.pack(fill="x")
        self.scrollbar.config(command=self.scrolled_entry.xview)
        self.scrolled_entry.config()

    def addnew(self):

        if (str(self.name_entry.get()) != "" and str(self.gender_v.get()) != ""
                and str(self.dob_e.get_date()) != ""
                and str(self.ph_number_entry.get()) != ""
                and str(self.adhaar_entry.get()) != ""
                and str(self.scrolled_entry.get()) != ""):
            self.password = simpledialog.askstring(
                "Enter Password",
                "Enter a Password For This New Staff Member",
                parent=self.master)

            if (self.password == ""):
                messagebox.showerror("Password Must",
                                     "Password Can't be Empty")
                self.addnew()

            else:
                try:
                    mydb = mysql.connector.connect(host="localhost",
                                                   user="******",
                                                   passwd="")
                    try:
                        mycursor = mydb.cursor()
                        mycursor.execute("CREATE DATABASE IF NOT EXISTS staff")
                        mycursor.execute("USE staff")
                        mycursor.execute(
                            "CREATE TABLE IF NOT EXISTS staff_member_record (staff_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(20),"
                            "gender VARCHAR(10),date_of_birth VARCHAR(20),"
                            "marital_status VARCHAR(15),phone_number VARCHAR(16),adhaar_number VARCHAR(20),permanent_address VARCHAR(200),password VARCHAR(50))"
                        )

                        mycursor.execute(
                            "INSERT INTO staff_member_record(name,gender,date_of_birth,marital_status,"
                            "phone_number,adhaar_number,permanent_address,password)VALUES(%s,%s,%s,%s,%s,%s,%s,%s)",
                            (
                                str(self.name_entry.get()),
                                str(self.gender_v.get()),
                                str(self.dob_e.get_date()),
                                str(self.marital_combobox.get()),
                                str(self.ph_number_entry.get()),
                                str(self.adhaar_entry.get()),
                                str(self.scrolled_entry.get()),
                                str(self.password),
                            ))

                        mycursor.close()
                        mydb.commit()
                        messagebox.showinfo(
                            "Succed", "Table Has Been Succesfully Created")
                    except Exception as ex:
                        messagebox.showerror(
                            "Error Occured",
                            "Error in fetching due to " + str(ex))
                    finally:
                        mydb.close()

                except Exception as ex:
                    messagebox.showerror(
                        "Error Occured",
                        "Error creating database due to " + str(ex))
        else:
            messagebox.showerror("Error Occured", "Please Fill All The Fields")
            self.master.deiconify()

    def search(self):

        if (True):
            try:
                mydb = mysql.connector.connect(host="localhost",
                                               user="******",
                                               passwd="")
                try:

                    mycursor = mydb.cursor()
                    mycursor.execute("USE staff")
                    mycursor.execute(
                        "SELECT * FROM staff_member_record WHERE staff_id = %s",
                        (str(self.staff_id_entry.get()), ))
                    record = mycursor.fetchall()

                    for row in record:
                        print(row[1], row[2], row[3], row[4], row[5])
                        self.staff_id_entry.delete(0, END)
                        self.staff_id_entry.insert(END, str(row[0]))
                        self.name_entry.delete(0, END)
                        self.name_entry.insert(END, str(row[1]))
                        if (str(row[2]) == "Male"):
                            self.gender_v.set("Male")
                        elif (str(row[2]) == "Female"):
                            self.gender_v.set("Female")
                        self.dob_e.delete(0, END)
                        self.dob_e.insert(END, str(row[3]))
                        self.marital_combobox.delete(0, END)
                        self.marital_combobox.insert(END, str(row[4]))
                        self.ph_number_entry.delete(0, END)
                        self.ph_number_entry.insert(END, str(row[5]))
                        self.adhaar_entry.delete(0, END)
                        self.adhaar_entry.insert(END, str(row[6]))
                        self.scrolled_entry.delete(0, END)
                        self.scrolled_entry.insert(END, str(row[7]))

                    mycursor.close()
                    mydb.commit()
                except Exception as ex:
                    messagebox.showerror("Error Occured",
                                         "Error in fetching due to " + str(ex))
                finally:
                    mydb.close()

            except Exception as ex:
                messagebox.showerror(
                    "Error Occured",
                    "Error creating database due to " + str(ex))
Esempio n. 14
0
def edit_task(task):
    existing_tasks = get_all_tasks_from_file()
    task_to_edit = existing_tasks[eval(task)]
    clear_view()
    Label(text="Enter your task name: ").grid(row=0,
                                              column=0,
                                              padx=20,
                                              pady=20)
    name = Entry(tk)
    name.delete(0, END)
    name.insert(0, task_to_edit['name'])
    name.grid(row=0, column=1, padx=20, pady=20)
    Label(tk, text="Due date: ").grid(row=1, column=0, padx=20, pady=20)
    date = DateEntry(tk)
    date.delete(0, END)
    date.insert(0, task_to_edit['due_date'])
    date.grid(row=1, column=1, padx=20, pady=20)
    Label(tk, text="Description: ").grid(row=2, column=0, padx=20, pady=20)
    description = ScrolledText(tk, width=20, height=10)
    description.insert(INSERT, task_to_edit['description'])
    description.insert(END, "")
    description.grid(row=2, column=1, padx=20, pady=20)
    Label(
        text=
        f"Select priority, current is {task_to_edit['priority'] if task_to_edit['priority'] != 0 else None}"
    ).grid(row=3, column=0, padx=20, pady=20)
    s = IntVar()
    rad1 = Radiobutton(tk, text='Low', value=1, variable=s)
    rad2 = Radiobutton(tk, text='Medium', value=2, variable=s)
    rad3 = Radiobutton(tk, text='High', value=3, variable=s)

    rad1.grid(column=1, row=3)
    rad2.grid(column=2, row=3)
    rad3.grid(column=3, row=3)
    Label(tk, text="Check if completed: ").grid(row=4,
                                                column=0,
                                                padx=20,
                                                pady=20)
    Label(tk, text="Check if completed: ").grid(row=4,
                                                column=0,
                                                padx=20,
                                                pady=20)
    chk_state = BooleanVar()
    chk_state.set(task_to_edit["is_completed"])  # set check state
    chk = Checkbutton(tk, text='Choose', var=chk_state)
    chk.grid(column=1, row=4)

    Button(tk,
           text="Edit task",
           bg="yellow",
           fg="black",
           command=lambda: write_tasks_to_file(all_tasks_to_write, task_to_edit
                                               )).grid(row=5, column=0)
    Button(tk,
           text="Cancel",
           bg="black",
           fg="white",
           command=lambda: render_main_view()).grid(row=5,
                                                    column=1,
                                                    padx=100,
                                                    pady=100)
Esempio n. 15
0
class DesktopApp(tk.Tk):  #root class
    def __init__(self):
        super().__init__()
        self.title("Desktops Management System")
        self.geometry(
            "840x640+640+200")  #scrn_length*scrn_breadth+scrnXpos+scrnYpos

        #LABELS
        self.lblTitle = tk.Label(self,
                                 text="Desktops Management System",
                                 font=("Helvetica", 16),
                                 bg="yellow",
                                 fg="green",
                                 relief="ridge")
        self.lblName = tk.Label(self,
                                text="UserName:"******"Helvetica", 10),
                                bg="blue",
                                fg="yellow")
        self.lblCPU = tk.Label(self,
                               text="CPU usage : ",
                               font=("Helvetica", 10),
                               bg="blue",
                               fg="yellow")
        self.lblDisk = tk.Label(self,
                                text="Disk storage : ",
                                font=("Helvetica", 10),
                                bg="blue",
                                fg="yellow")
        self.lblLocal = tk.Label(self,
                                 text="Localhost : ",
                                 font=("Helvetica", 10),
                                 bg="blue",
                                 fg="yellow")
        self.lblNet = tk.Label(self,
                               text="Network Status : ",
                               font=("Helvetica", 10),
                               bg="blue",
                               fg="yellow")
        self.lblMemo = tk.Label(self,
                                text="Memory usage : ",
                                font=("Helvetica", 10),
                                bg="blue",
                                fg="yellow")
        self.lblDate = tk.Label(self,
                                text="Select Date : ",
                                font=("Helvetica", 10),
                                bg="blue",
                                fg="yellow")
        self.lblSelect = tk.Label(
            self,
            text="Please select one record below to update or delete",
            font=("Helvetica", 10),
            bg="blue",
            fg="yellow")  #MESSAGE
        self.lblSearch = tk.Label(self,
                                  text="Please Enter System ID:",
                                  font=("Helvetica", 10),
                                  bg="blue",
                                  fg="yellow")

        #ENTRIES
        self.entName = tk.Entry(self)
        self.entCPU = tk.Entry(self)
        self.entDisk = tk.Entry(self)
        self.entLocal = tk.Entry(self)
        self.entNet = tk.Entry(self)
        self.entMemo = tk.Entry(self)
        self.entSearch = tk.Entry(self)

        self.entDate = DateEntry(self,
                                 width=12,
                                 background='darkblue',
                                 foreground='white',
                                 borderwidth=2,
                                 year=2021,
                                 locale='en_US',
                                 date_pattern='y-mm-dd')

        #BUTTONS
        self.btnRegister = tk.Button(self,
                                     text="Register",
                                     font=("Helvetica", 11),
                                     bg="yellow",
                                     fg="blue",
                                     command=self.register_desktop)
        self.btnUpdate = tk.Button(self,
                                   text="Update",
                                   font=("Helvetica", 11),
                                   bg="yellow",
                                   fg="blue",
                                   command=self.update_desktop)
        self.btnDelete = tk.Button(self,
                                   text="Delete",
                                   font=("Helvetica", 11),
                                   bg="yellow",
                                   fg="blue",
                                   command=self.delete_desktop_data)
        self.btnClear = tk.Button(self,
                                  text="Clear",
                                  font=("Helvetica", 11),
                                  bg="yellow",
                                  fg="blue",
                                  command=self.clear_form)
        self.btnShowAll = tk.Button(self,
                                    text="Show All",
                                    font=("Helvetica", 11),
                                    bg="yellow",
                                    fg="blue",
                                    command=self.load_desktop_data)
        self.btnSearch = tk.Button(self,
                                   text="Search",
                                   font=("Helvetica", 11),
                                   bg="yellow",
                                   fg="blue",
                                   command=self.show_search_record)
        self.btnExit = tk.Button(self,
                                 text="Exit",
                                 font=("Helvetica", 11),
                                 bg="yellow",
                                 fg="blue",
                                 command=self.exit)

        #TABLE(TREEVIEW)
        columns = ("#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8")
        self.tvDesktop = ttk.Treeview(self,
                                      show="headings",
                                      height="50",
                                      columns=columns)
        self.tvDesktop.heading('#1', text='DeskID', anchor='center')
        self.tvDesktop.column('#1', width=10, anchor='center', stretch=True)
        self.tvDesktop.heading('#2', text='UserName', anchor='center')
        self.tvDesktop.column('#2', width=10, anchor='center', stretch=True)
        self.tvDesktop.heading('#3', text='Processor', anchor='center')
        self.tvDesktop.column('#3', width=12, anchor='center', stretch=True)
        self.tvDesktop.heading('#4', text='Storage', anchor='center')
        self.tvDesktop.column('#4', width=12, anchor='center', stretch=True)
        self.tvDesktop.heading('#5', text='Localhost', anchor='center')
        self.tvDesktop.column('#5', width=12, anchor='center', stretch=True)
        self.tvDesktop.heading('#6', text='Network', anchor='center')
        self.tvDesktop.column('#6', width=12, anchor='center', stretch=True)
        self.tvDesktop.heading('#7', text='Memory', anchor='center')
        self.tvDesktop.column('#7', width=12, anchor='center', stretch=True)
        self.tvDesktop.heading('#8', text='Date', anchor='center')
        self.tvDesktop.column('#8', width=10, anchor='center', stretch=True)

        #SCROLL BARS
        vsb = ttk.Scrollbar(self,
                            orient=tk.VERTICAL,
                            command=self.tvDesktop.yview)
        vsb.place(x=40 + 640 + 1, y=310, height=180 + 20)
        self.tvDesktop.configure(yscroll=vsb.set)
        hsb = ttk.Scrollbar(self,
                            orient=tk.HORIZONTAL,
                            command=self.tvDesktop.xview)
        hsb.place(x=40, y=310 + 200 + 1, width=620 + 20)
        self.tvDesktop.configure(xscroll=hsb.set)
        self.tvDesktop.bind("<<TreeviewSelect>>", self.show_selected_record)

        #LABELS
        self.lblTitle.place(x=270, y=27, height=30, width=300)

        self.lblName.place(x=30, y=70, height=25, width=125)
        self.lblCPU.place(x=30, y=115, height=25, width=125)
        self.lblDisk.place(x=30, y=160, height=25, width=125)

        self.lblLocal.place(x=410, y=70, height=25, width=125)
        self.lblNet.place(x=410, y=115, height=25, width=125)
        self.lblMemo.place(x=410, y=160, height=25, width=125)

        self.lblDate.place(x=30, y=205, height=25, width=125)
        self.lblSearch.place(x=30, y=560, height=25, width=225)
        self.lblSelect.place(x=166, y=290, height=20, width=436)

        #ENTRIES
        self.entName.place(x=170, y=70, height=25, width=225)
        self.entCPU.place(x=170, y=115, height=25, width=225)
        self.entDisk.place(x=170, y=160, height=25, width=225)

        self.entLocal.place(x=550, y=70, height=25, width=225)
        self.entNet.place(x=550, y=115, height=25, width=225)
        self.entMemo.place(x=550, y=160, height=25, width=225)

        self.entDate.place(x=170, y=205, height=25, width=225)
        self.entSearch.place(x=270, y=560, height=25, width=225)

        #BUTTONS
        self.btnUpdate.place(x=98, y=250, height=25, width=106)
        self.btnDelete.place(x=234, y=250, height=25, width=106)
        self.btnRegister.place(x=370, y=250, height=25, width=106)
        self.btnClear.place(x=506, y=250, height=25, width=106)
        self.btnShowAll.place(x=642, y=250, height=25, width=106)
        self.btnSearch.place(x=505, y=558, height=45, width=114)
        self.btnExit.place(x=649, y=558, height=45, width=114)

        self.tvDesktop.place(x=40, y=310, height=200, width=640)
        self.create_table()
        self.load_desktop_data()

    def clear_form(self):
        self.entName.delete(0, tk.END)
        self.entCPU.delete(0, tk.END)
        self.entDisk.delete(0, tk.END)
        self.entLocal.delete(0, tk.END)
        self.entNet.delete(0, tk.END)
        self.entMemo.delete(0, tk.END)
        self.entDate.delete(0, tk.END)

    def exit(self):
        MsgBox = mb.askquestion(
            'Exit Application',
            'Are you sure you want to exit the application?',
            icon='warning')
        if MsgBox == 'yes':
            self.destroy()

    def delete_desktop_data(self):
        MsgBox = mb.askquestion(
            'Delete Record',
            'Are you sure! you want to delete selected desktop record?',
            icon='warning')
        if MsgBox == 'yes':
            if db_connection.is_connected() == False:
                db_connection.connect()
        db_cursor.execute("USE Desktop")  # Interact with  Database
        # deleteing selected Desktop record
        Delete = "DELETE FROM Desktop_master WHERE deskno='%s'" % (Desk_Number)
        db_cursor.execute(Delete)
        db_connection.commit()
        mb.showinfo("Information", "Desktop Record Deleted Succssfully")
        self.load_desktop_data()
        self.entName.delete(0, tk.END)
        self.entCPU.delete(0, tk.END)
        self.entDisk.delete(0, tk.END)
        self.entLocal.delete(0, tk.END)
        self.entNet.delete(0, tk.END)
        self.entMemo.delete(0, tk.END)
        self.entDate.delete(0, tk.END)

    def create_table(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        # executing cursor with execute method and pass SQL query
        db_cursor.execute("CREATE DATABASE IF NOT EXISTS Desktop"
                          )  # Create a Database named Desktop
        db_cursor.execute("USE Desktop")  # Interact with Desktop Database
        # creating required tables
        db_cursor.execute(
            "CREATE TABLE IF NOT EXISTS Desktop_master(Id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,deskno INT(15),uname VARCHAR(30),CPU VARCHAR(30), disk VARCHAR(30), localhost VARCHAR(30),network VARCHAR(30), memory VARCHAR(30), joindate DATE)AUTO_INCREMENT=1"
        )
        db_connection.commit()

    def register_desktop(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        name_data = self.entName.get()
        CPU_data = self.entCPU.get()
        disk_data = self.entDisk.get()
        local_data = self.entLocal.get()
        network_data = self.entNet.get()
        memory_data = self.entMemo.get()
        date_data = self.entDate.get()

        #ALERT USER FOR EMPTY FIELDS
        if name_data == "":
            mb.showinfo('Information', "Please Enter Name")
            self.entName.focus_set()
            return
        if CPU_data == "":
            mb.showinfo('Information', "Please Enter CPU Stat")
            self.entCPU.focus_set()
            return
        if disk_data == "":
            mb.showinfo('Information', "Please Enter Disk Stat")
            self.entDisk.focus_set()
            return
        if local_data == "":
            mb.showinfo('Information', "Please Enter Localhost Stat")
            self.entLocal.focus_set()
            return
        if network_data == "":
            mb.showinfo('Information', "Please Enter Network Stat")
            self.entNet.focus_set()
            return
        if memory_data == "":
            mb.showinfo('Information', "Please Enter Memory Stat")
            self.entMemo.focus_set()
            return
        if date_data == "":
            mb.showinfo('Information', "Please Enter the Date")
            self.entDate.focus_set()
            return

        # Inserting record into Desktop_master table of Desktop database
        try:
            deskno = int(self.fetch_max_desk_no())
            print("New Desktop Id: " + str(deskno))
            query2 = "INSERT INTO Desktop_master (deskno, uname, CPU, disk, localhost, network, memory, joindate) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
            # implement query Sentence
            db_cursor.execute(
                query2, (deskno, name_data, CPU_data, disk_data, local_data,
                         network_data, memory_data, date_data))
            mb.showinfo('Information', "Desktop Registration Successfully")
            # Submit to database for execution
            db_connection.commit()
            self.load_desktop_data()
        except mysql.connector.Error as err:
            print(err)
            # Rollback in case there is any error
            db_connection.rollback()
            mb.showinfo('Information', "Data Insertion Failed!!!")
        finally:
            db_connection.close()

    def fetch_max_desk_no(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        db_cursor.execute("USE Desktop")  # Interact with desktop Database
        deskno = 0
        query1 = "SELECT deskno FROM Desktop_master order by  id DESC LIMIT 1"
        # implement query Sentence
        db_cursor.execute(query1)  # Retrieving maximum desktop id no
        print("No of Records Fetched:" + str(db_cursor.rowcount))
        if db_cursor.rowcount == 0:
            deskno = 1
        else:
            rows = db_cursor.fetchall()
            for row in rows:
                deskno = row[0]
            deskno = deskno + 1
        print("Max desktop Id: " + str(deskno))
        return deskno

    def show_search_record(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        s_desk_no = self.entSearch.get()
        print(s_desk_no)
        if s_desk_no == "":
            mb.showinfo('Information', "Please Enter Desktop Number")
            self.entSearch.focus_set()
            return
        self.tvDesktop.delete(*self.tvDesktop.get_children())
        db_cursor.execute("USE Desktop")
        query3 = "SELECT deskno, uname, CPU, disk, localhost, network, memory, date_format(joindate,'%d-%m-%Y') FROM Desktop_master WHERE deskno='" + s_desk_no + "'"
        db_cursor.execute(query3)
        total = db_cursor.rowcount
        print("Total Desktops : " + str(total))
        rows = db_cursor.fetchall()

        Desk_No = ""
        User_Name = ""
        CPU_Stat = ""
        disk_Stat = ""
        local_Stat = ""
        net_Stat = ""
        memo_Stat = ""
        date_Stat = ""

        for row in rows:
            Desk_No = row[0]
            User_Name = row[1]
            CPU_Stat = row[2]
            disk_Stat = row[3]
            local_Stat = row[4]
            net_Stat = row[5]
            memo_Stat = row[6]
            date_Stat = row[7]
            print("Desk Number: " + str(Desk_No))
            self.tvDesktop.insert("",
                                  'end',
                                  text=Desk_No,
                                  values=(Desk_No, User_Name, CPU_Stat,
                                          disk_Stat, local_Stat, net_Stat,
                                          memo_Stat, date_Stat))

    def show_selected_record(self, event):
        self.clear_form()
        for selection in self.tvDesktop.selection():
            item = self.tvDesktop.item(selection)
        global Desk_Number
        Desk_Number, PCname, PCcpu, PCdisk, PClocal, PCnet, PCmem, PCdate = item[
            "values"][0:8]
        self.entName.insert(0, PCname)
        self.entCPU.insert(0, PCcpu)
        self.entDisk.insert(0, PCdisk)
        self.entLocal.insert(0, PClocal)
        self.entNet.insert(0, PCnet)
        self.entMemo.insert(0, PCmem)
        self.entDate.insert(0, PCdate)
        return Desk_Number

    def update_desktop(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        print("Updating")
        db_cursor.execute("USE Desktop")
        User_Name = self.entName.get()
        CPU_Stat = self.entCPU.get()
        disk_Stat = self.entDisk.get()
        local_Stat = self.entLocal.get()
        net_Stat = self.entNet.get()
        memo_Stat = self.entMemo.get()
        date_Stat = self.entDate.get()
        print(Desk_Number)
        query4 = "UPDATE Desktop_master SET uname='%s', CPU='%s', disk='%s', localhost='%s', network='%s', memory='%s', joindate='%s' WHERE deskno='%s'" % (
            User_Name, CPU_Stat, disk_Stat, local_Stat, net_Stat, memo_Stat,
            date_Stat, Desk_Number)
        db_cursor.execute(query4)
        db_connection.commit()
        mb.showinfo("Info", "Selected Desktop Record Updated Successfully ")
        self.load_desktop_data()

    def load_desktop_data(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        self.entDate.delete(0, tk.END)
        self.tvDesktop.delete(*self.tvDesktop.get_children())
        db_cursor.execute("USE Desktop")
        query5 = "SELECT deskno, uname, CPU, disk, localhost, network, memory, date_format(joindate,'%d-%m-%Y') FROM Desktop_master"
        db_cursor.execute(query5)
        total = db_cursor.rowcount
        #if total ==0:
        #mb.showinfo("Info", "Nothing To Display,Please add data")
        #return
        print("Total Data Entries:" + str(total))
        rows = db_cursor.fetchall()

        Desk_No = ""
        User_Name = ""
        CPU_Stat = ""
        disk_Stat = ""
        local_Stat = ""
        net_Stat = ""
        memo_Stat = ""
        date_Stat = ""

        for row in rows:
            Desk_No = row[0]
            User_Name = row[1]
            CPU_Stat = row[2]
            disk_Stat = row[3]
            local_Stat = row[4]
            net_Stat = row[5]
            memo_Stat = row[6]
            date_Stat = row[7]

            self.tvDesktop.insert("",
                                  'end',
                                  text=Desk_No,
                                  values=(Desk_No, User_Name, CPU_Stat,
                                          disk_Stat, local_Stat, net_Stat,
                                          memo_Stat, date_Stat))
Esempio n. 16
0
class oneway:
    def __init__(self, user, window):

        self.search_by = StringVar()

        self.search_txt = StringVar()
        self.list2 = [{
            'name': 'Select',
            'price': []
        }, {
            'name': 'Economy',
            'price': 3000
        }, {
            'name': 'Premium Economy',
            'price': 4000
        }, {
            'name': 'Business Class',
            'price': 5000
        }, {
            'name': 'First Class',
            'price': 6000
        }]
        # Get the names of the all flights name

        self.names = list(map(lambda x: x.get('name'), self.list2))

        print(self.names)

        self.window = window
        self.user_id = user
        self.item_index = []
        self.user = user
        self.window.title('User Form')
        self.window.geometry('1100x650+90+40')

        self.frame1 = Frame(self.window, bg='#37474F')
        self.frame1.place(x=0, y=0, height=650, width=1100)
        self.frame2 = Frame(self.frame1, bg='white', bd=1, relief=RIDGE)
        self.frame2.place(x=390, y=130, height=360, width=630)
        self.label_name = Label(self.frame1,
                                text="One Way Flight",
                                font=('Impact', 20, 'bold'),
                                fg="white",
                                bg='#37474F')
        self.label_name.place(x=300, y=15)
        time1 = StringVar()
        time1.set(time.strftime('%H:%M:%S:%p'))
        self.ent_where = Label(self.frame1,
                               font=('times new roman', 25),
                               fg='white',
                               bg='#37474F',
                               textvariable=time1)
        self.ent_where.place(x=60, y=5)

        self.label_name = Label(self.frame1,
                                text="Where From:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='white',
                                bg='#37474F')
        self.label_name.place(x=50, y=90)
        self.ent_where = Entry(self.frame1,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_where.place(x=170, y=90, width=200, height=30)
        self.label_name = Label(self.frame1,
                                text="Where To:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='white',
                                bg='#37474F')
        self.label_name.place(x=50, y=140)
        self.ent_to = Entry(self.frame1,
                            font=('times new roman', 9),
                            bg='lightgray')
        self.ent_to.place(x=170, y=140, width=200, height=30)
        self.label_name = Label(self.frame1,
                                text="Departure Date:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='white',
                                bg='#37474F')
        self.label_name.place(x=50, y=190)
        self.ent_dpt = DateEntry(self.frame1,
                                 width=12,
                                 background='darkblue',
                                 foreground='white',
                                 borderwidth=2)
        self.ent_dpt.place(x=170, y=190, width=200)
        ttk.Button(self.frame1, text="ok")

        self.combo = Label(self.frame1,
                           text="Age Selection:",
                           font=('Goudy old style', 12, 'bold'),
                           fg='white',
                           bg='#37474F').place(x=50, y=240)
        self.txt_combo = ttk.Combobox(self.frame1,
                                      font=('times new roman', 9),
                                      state='readonly',
                                      justify=CENTER)
        self.txt_combo['values'] = ('select', 'Adult', 'Children', 'Infant',
                                    'Old age')

        self.txt_combo.place(x=170, y=240)
        self.txt_combo.current(0)

        self.label_name = Label(self.frame1,
                                text="Count:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='white',
                                bg='#37474F')
        self.label_name.place(x=50, y=290)
        self.ent_count = Entry(self.frame1,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_count.place(x=170, y=290, width=200, height=30)
        self.classcombo = Label(self.frame1,
                                text="Class Selection:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='white',
                                bg='#37474F').place(x=50, y=340)
        self.txt_classcombo = ttk.Combobox(self.frame1,
                                           font=('times new roman', 9),
                                           state='readonly',
                                           justify=CENTER,
                                           values=self.names)
        # self.txt_classcombo['values'] = ('Economy', 'Premium Economy', 'Business Class', 'First Class')
        self.txt_classcombo.bind('<<ComboboxSelected>>', self.fetch_data)

        self.txt_classcombo.place(x=170, y=340)
        self.txt_classcombo.current(0)
        self.label_price = Label(self.frame1,
                                 text="Price:",
                                 font=('Goudy old style', 12, 'bold'),
                                 fg='white',
                                 bg='#37474F')
        self.label_price.place(x=50, y=390)
        self.ent_price = Entry(self.frame1,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_price.place(x=170, y=390, width=200, height=30)
        self.ent_price.insert(0, '')
        self.flight = Label(self.frame1,
                            text="Flight Selection:",
                            font=('Goudy old style', 12, 'bold'),
                            fg='white',
                            bg='#37474F').place(x=50, y=440)
        self.txt_flight = ttk.Combobox(self.frame1,
                                       font=('times new roman', 9),
                                       state='readonly',
                                       justify=CENTER)
        self.txt_flight['values'] = ('select', 'Buddha Air', 'Yeti Airlines',
                                     'Surya Airline', 'Nepal Airlines',
                                     'Tara Airlines')

        self.txt_flight.place(x=170, y=440)
        self.txt_flight.current(0)

        self.item_entry = Entry(self.window, textvariable=self.search_txt)
        self.item_entry.place(x=400, y=90)
        self.txt_combo_1 = ttk.Combobox(self.frame1,
                                        textvariable=self.search_by,
                                        font=('times new roman', 9),
                                        state='readonly',
                                        justify=CENTER)
        self.txt_combo_1['values'] = ('flight_name', 'destination',
                                      'class_selection')

        self.txt_combo_1.place(x=600, y=90)
        self.txt_combo_1.current(0)

        self.btn_add = Button(self.window,
                              text="Search",
                              command=self.Search_items)
        self.btn_add.place(x=800, y=90)

        self.btn_book = Button(self.frame1,
                               text="Book Flight",
                               relief=RAISED,
                               bg='#001C55',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.book_flight)
        self.btn_book.place(x=100, y=550)
        self.btn_book = Button(self.frame1,
                               text="Cancel Flight",
                               relief=RAISED,
                               bg='#00072D',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.delete_item)
        self.btn_book.place(x=540, y=550)
        self.btn_book = Button(self.frame1,
                               text="Bill",
                               relief=RAISED,
                               bg='#00072D',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.generate_bill)
        self.btn_book.place(x=700, y=550)
        self.btn_book = Button(self.frame1,
                               text="Update",
                               relief=RAISED,
                               bg='#00072D',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.update)
        self.btn_book.place(x=800, y=550)
        scroll_x = Scrollbar(self.frame2, orient=HORIZONTAL)
        self.bg1 = ImageTk.PhotoImage(
            file=
            'C:\\Users\\Dell\\PycharmProjects\\untitled3\\project\\Webp.net-resizeimage (3).png'
        )
        self.btn4 = Button(self.window,
                           image=self.bg1,
                           text='Logout',
                           relief=RAISED,
                           bg='#37474F',
                           font=('arial', 14, 'bold'),
                           fg='white',
                           bd=0,
                           command=exit)
        self.btn4.place(x=1000, y=7, width=90)

        self.item_tree = ttk.Treeview(
            self.frame2,
            selectmode='browse',
            columns=('ID', 'Where from', 'Where to', 'Departure Date',
                     'Age Selection', 'Count', 'Class Selection', 'User_id',
                     'Flight_Name', 'Price'),
            xscrollcommand=scroll_x.set)
        self.item_tree.pack(fill=BOTH, expand=1)
        #self.item_tree.place(x=390,y=120)
        scroll_x.pack(side=BOTTOM, fill=X)
        scroll_x.config(command=self.item_tree.xview)

        self.item_tree['show'] = 'headings'
        self.item_tree.column('ID', width=90, anchor='center')
        self.item_tree.column('Where from', width=90, anchor='center')
        self.item_tree.column('Where to', width=90, anchor='center')
        self.item_tree.column('Departure Date', width=90, anchor='center')

        self.item_tree.column('Age Selection', width=90, anchor='center')
        self.item_tree.column('Count', width=90, anchor='center')
        self.item_tree.column('Class Selection', width=90, anchor='center')
        self.item_tree.column('User_id', width=90, anchor='center')

        self.item_tree.column('Flight_Name', width=90, anchor='center')

        self.item_tree.column('Price', width=90, anchor='center')
        self.item_tree.heading('ID', text="ID")
        self.item_tree.heading('Where from', text="Where from")
        self.item_tree.heading('Where to', text="Where to")
        self.item_tree.heading('Departure Date', text="Departure Date")

        self.item_tree.heading('Age Selection', text="Age Selection")
        self.item_tree.heading('Count', text="Count")
        self.item_tree.heading('Class Selection', text="Class Selection")
        self.item_tree.heading('User_id', text="User ID")
        self.item_tree.heading('Flight_Name', text="Flight_Name")
        self.item_tree.heading('Price', text="Price")

        # scroll_x = Scrollbar(manage_teacher_frame2_1, orient=HORIZONTAL)
        #
        # scroll_x.pack(side=BOTTOM, fill=X)
        # scroll_x.config(command=self.teacher_tree.xview)
        # scroll_y.pack(side=RIGHT, fill=Y)

        # self.item_treeScrollbar=ttk.Scrollbar(self.window,orient='horizontal',command=self.item_tree.xview)
        # self.item_tree.configure(xscroll=self.item_treeScrollbar.set)
        # self.item_treeScrollbar.pack(side=BOTTOM,fill=X)
        self.show_in_treeview()

    def clear(self):
        self.ent_where.delete(0, END)
        self.ent_to.delete(0, END)
        self.ent_dpt.delete(0, END)
        self.txt_combo.set('')
        self.ent_count.delete(0, END)
        self.txt_classcombo.set('')

    # def logout(self):
    #     messagebox.showinfo('Message','Do you want to log out')
    #     import login2
    #     self.window.withdraw()
    #     dd = Toplevel(self.window)
    #
    #     login2.Login(dd)

    def update(self):
        selected_item = self.item_tree.selection()[0]
        self.item_index = self.item_tree.item(selected_item, 'text')
        item_data = self.item_tree.item(selected_item, 'values')

        if item_data[0] == '':
            messagebox.showerror('error', 'select a row')
        else:
            if form2.Item_dlt().update_items(item_data[0],
                                             self.ent_where.get(),
                                             self.ent_to.get(),
                                             self.ent_dpt.get_date(),
                                             self.txt_combo.get(),
                                             self.ent_count.get(),
                                             self.txt_classcombo.get(),
                                             self.txt_flight.get(),
                                             self.ent_price.get(),
                                             self.user_id):
                messagebox.showinfo("Item", "Booking Updated")
                self.show_in_treeview()

            else:
                messagebox.showerror("Error",
                                     "Booking Details cannot be added")

    def book_flight(self):
        if self.ent_where.get() == "" or self.ent_to.get(
        ) == "" or self.ent_dpt.get() == "" or self.txt_combo.get(
        ) == "" or self.ent_count.get() == "" or self.txt_classcombo.get(
        ) == "":
            messagebox.showerror('Error', 'please enter all required fields')

        else:

            try:

                form2.oneway_flight().oneway_reg(self.ent_where.get(),
                                                 self.ent_to.get(),
                                                 self.ent_dpt.get_date(),
                                                 self.txt_combo.get(),
                                                 self.ent_count.get(),
                                                 self.txt_classcombo.get(),
                                                 self.user_id,
                                                 self.txt_flight.get(),
                                                 self.ent_price.get())

                messagebox.showinfo('success',
                                    'Register successfull',
                                    parent=self.window)
                self.show_in_treeview()

                #self.clear()
            except Exception as e:
                messagebox.showerror('error',
                                     f'error:{str(e)}',
                                     parent=self.window)

    def fetch_data(self, *args):

        va = filter(lambda x: x.get('name') == self.txt_classcombo.get(),
                    self.list2)

        self.ent_price.delete(0, END)
        self.ent_price.insert(0, next(va).get('price'))

    def select_item(self, event):
        selected_item = self.item_tree.selection()[0]
        self.item_index = self.item_tree.item(selected_item, 'text')
        item_data = self.item_tree.item(selected_item, 'values')

        self.ent_where.delete(0, END)
        self.ent_where.insert(0, item_data[1])
        self.ent_to.delete(0, END)
        self.ent_to.insert(0, item_data[2])

        #dpt_date_f=datetime.datetime.strptime(int(item_data[2]/3), '%Y-%m-%d').strftime('%m/%d/%y')

        dpt_date = datetime.datetime(int(item_data[3][0:4]),
                                     int(item_data[3][5:7]),
                                     int(item_data[3][8:10]))
        dpt_date_f = dpt_date.strftime('%m/%d/%y')

        self.ent_dpt.set_date(dpt_date_f)

        self.txt_combo.set(item_data[4])
        self.txt_combo.current()

        self.ent_count.delete(0, END)
        self.ent_count.insert(0, item_data[5])
        self.txt_classcombo.set(item_data[6])
        self.txt_classcombo.current()

        self.txt_flight.set(item_data[8])
        self.txt_flight.current()
        self.ent_price.delete(0, END)
        self.ent_price.insert(0, item_data[9])

    def show_in_treeview(self):
        #
        # qry = 'select * from oneway where user_id=%s'
        # self.my_cursor.execute(qry,(self.user_id))
        row = form2.show_flight().show_in_treeview(self.user_id)
        # spot_marker = 0
        # while spot_marker < len(row):
        #     for num in range(spot_marker, len(row)):
        #         if row[num] < row[spot_marker]:
        #             row[spot_marker], row[num] = row[num], row[spot_marker]
        #     spot_marker += 1
        #     print(row)
        if row:

            self.item_tree.delete(*self.item_tree.get_children())

            for i in row:
                #self.tree.item(idx)['text']

                self.item_tree.insert("",
                                      "end",
                                      text=i[0],
                                      value=(i[0], i[1], i[2], i[3], i[4],
                                             i[5], i[6], i[7], i[8], i[9]))
            # self.my_connection.commit()
        self.item_tree.bind('<Double-1>', self.select_item)

    def Search_items(self):
        con = mysql.connector.connect(host='localhost',
                                      user='******',
                                      password='',
                                      database='register')
        cur = con.cursor()
        values = (
            str(self.search_by.get()),
            '"{}"'.format(str(self.search_txt.get() + '%')),
        )
        qry = (
            f"SELECT ID,destination,source,dpt,combo,count_no,class_selection,user_id,flight_name,price FROM oneway WHERE user_id={self.user_id} AND {values[0]} LIKE {values[1]}  "
        )

        cur.execute(qry)
        rows = cur.fetchall()

        if len(rows) != 0:
            self.item_tree.delete(*self.item_tree.get_children())

            for row in rows:
                self.item_tree.insert("", END, values=row)
            con.commit()

    def valid(self):

        if self.ent_where.get() == "" or self.ent_to.get(
        ) == "" or self.ent_dpt.get() == "" or self.txt_combo.get(
        ) == "" or self.ent_count.get() == "" or self.txt_classcombo.get(
        ) == "":
            messagebox.showerror('Error', 'please enter all required fields')

            return False

        else:
            return True

    def delete_item(self):
        selected_item = self.item_tree.selection()[0]

        item_data = self.item_tree.item(selected_item, 'text')

        index = item_data
        if form2.Item_dlt().delete_items(index):
            messagebox.showinfo('Item', 'Item Deleted')
            self.show_in_treeview()

            # selected_item = self.item_tree.selection()
            # self.item_tree.delete(selected_item)

        else:
            messagebox.showerror("Error",
                                 "Item cannot be deleted",
                                 parent=self.window)

    def generate_bill(self):
        all_orders = self.item_tree.get_children()
        bill_list = []
        total = 0
        # tbl=self.order_tree.item(all_orders[0],'values')[0]
        # name=self.order_tree.item(all_orders[1],'values')[1]
        for i in all_orders:
            order = self.item_tree.item(i, 'values')
            amt = float(order[5]) * float(order[9])
            bill_list.append((order[2], order[3], order[4], order[5], order[6],
                              order[8], order[9], amt))
            total += amt
        BillView(bill_list, total, self.user)
Esempio n. 17
0
class MainWindow(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.master.title("Delivery Accountant")
        self.master.minsize(1440, 1080)
        self.master.resizable(True, True)
        # create_tables()
        # draws searching engine
        self.duedate_dockets()
        # additional info for dates
        self.customer_info = self.draw_info(CUSTOMER,
                                            pos_x=2,
                                            pos_y=0,
                                            span_x=2,
                                            span_y=1)
        self.vendor_info = self.draw_info(VENDOR,
                                          pos_x=2,
                                          pos_y=1,
                                          span_x=2,
                                          span_y=1)
        self.draw_dates(pos_x=4, pos_y=0, span_x=2, span_y=1)
        self.draw_notes(pos_x=4, pos_y=1, span_x=2, span_y=2)
        self.draw_tasks(12, pos_x=2, pos_y=4, span_x=4, span_y=2)

        self.delivery_info(pos_x=6, pos_y=0, span_x=1, span_y=1)

        self.draw_menu()
        self.update_customer_combobox()
        self.update_vendor_combobox()
        # the only button for now in this app
        self.btn_submit = ttk.Button(text="submit")
        self.btn_submit.grid(column=0,
                             row=11,
                             columnspan=2,
                             rowspan=2,
                             sticky="NESW")

    def duedate_dockets(self):
        # search engine UI
        self.label_frame_search = tk.LabelFrame(text="Search")
        self.label_frame_search.grid(column=0,
                                     row=0,
                                     columnspan=2,
                                     rowspan=6,
                                     pady=10,
                                     padx=10,
                                     sticky="NESW")
        self.search_entry = tk.Entry(self.label_frame_search,
                                     bg=BASECOLOR,
                                     font=ENTRYFONT)
        self.search_entry.bind("<Return>", self.update_dockets_list)
        self.search_entry.grid(column=0, row=0)
        data = request_recent()
        self.list_dockets(data=data)

    def draw_menu(self):
        """Creates menue in the app"""
        self.menubar = tk.Menu(self.master)

        self.editmenu = tk.Menu(self.menubar, tearoff=0)
        self.editmenu.add_command(label="New Customer",
                                  command=lambda: self.new_partner(CUSTOMER))
        self.editmenu.add_command(label="New Vendor",
                                  command=lambda: self.new_partner(VENDOR))
        self.editmenu.add_command(label="New Delivery",
                                  command=self.new_delivery)

        self.menubar.add_cascade(label="Edit", menu=self.editmenu)

        # self.menubar.add_command(label="Report", command=report_open_tasks)
        self.menubar.add_command(label="Test database", command=self.db_test)
        self.master.config(menu=self.menubar)

    # UI labels with dockets
    def db_test(self):

        create_tables()

    def update_dockets_list(self, event):
        num = self.search_entry.get()
        self.update_by_docket(event, docket=int(num))
        self.list_dockets(data=request_recent())

    def new_delivery(self):
        self.set_active()
        self.clear_entries()
        self.clear_by_partner(CUSTOMER)
        self.clear_by_partner(VENDOR)
        self.btn_submit.configure(command=self.read_delivery_entries)

    def list_dockets(self, data=None, dockets=None):
        """
        parameter: data(list) includes list of strings to show
        """
        """if data is None:
            data = []
            for i in range(0, LENGTH_DOCKETS):
                data.append("Max and Co. \n # 30041")
        """
        # dont forget that there maybe less data than dockets!

        self.docket_labels = []
        font_list = None
        for i, obj in enumerate(data):
            if i % 2 == 0:
                font_list = SECONDARYCOLOR
            else:
                font_list = BASECOLOR
            # concatincates dict wit empty string
            text = ""
            for k, v in obj.items():
                text = text + str(k) + " : " + str(v) + "\n"
            label = tk.Label(self.label_frame_search, text=text, bg=font_list)
            label.grid(column=0, row=i + 1, sticky="NESW")
            label.bind("<Double-Button-1>", self.update_by_docket)
            self.docket_labels.append(label)

            # creates the label with data and packs it with grid

    def delivery_info(self, pos_x, pos_y, span_x, span_y):
        """
        draws delivery information of the form
        """
        self.label_frame_delivery = tk.LabelFrame(self.master,
                                                  text="Delivery Info")
        self.label_frame_delivery.grid(column=pos_x,
                                       row=pos_y,
                                       columnspan=2,
                                       sticky="NEW",
                                       padx=10,
                                       pady=10)
        self.deliver_address = tk.Label(self.label_frame_delivery,
                                        text="Delivery Address")
        self.deliver_address.grid(column=0, row=0)
        self.entry_del_address = tk.Entry(self.label_frame_delivery, width=30)
        self.entry_del_address.grid(column=1, row=0)

    def draw_info(self, name, pos_x, pos_y, span_x, span_y):
        """
        :parameter: labels: (bool) show the requirement of label of entry
        :parameter: name: whos info is going to showed up
        :return: (list) returns two lists that have information about state
        """
        label_frame = tk.LabelFrame(self.master, text="{} Info".format(name))
        label_frame.grid(column=pos_x,
                         row=pos_y,
                         columnspan=span_x,
                         rowspan=span_y,
                         pady=10,
                         padx=10,
                         sticky="NESW")

        # TODO backend method that returns all customers
        combobox = ttk.Combobox(label_frame, values=[], font=ENTRYFONT)
        combobox.grid(column=0, row=0, sticky="NESW")
        if name == CUSTOMER:
            combobox.bind("<<ComboboxSelected>>", self.update_customer_info)
        elif name == VENDOR:
            combobox.bind("<<ComboboxSelected>>", self.update_vendor_info)
        name_label = tk.Label(label_frame,
                              text="{} Name".format(name),
                              font=BASICFONT)
        name_label.grid(column=0, row=1, sticky="W")

        address_label = tk.Label(label_frame, text="Address", font=BASICFONT)
        address_label.grid(column=0, row=2, sticky="W")

        phone_label = tk.Label(label_frame, text="Phone", font=BASICFONT)
        phone_label.grid(column=0, row=3, sticky="W")

        contact_label = tk.Label(label_frame, text="Contact", font=BASICFONT)
        contact_label.grid(column=0, row=4, sticky="W")

        # if need lbels than it is going to draw labels, if not draw entries

        name = tk.Entry(label_frame, width=30)
        name.grid(column=1, row=1, sticky="NESW")

        address = tk.Entry(label_frame, width=30)
        address.grid(column=1, row=2, sticky="NESW")

        phone = tk.Entry(label_frame, width=30)
        phone.grid(column=1, row=3, sticky="NESW")

        contact = tk.Entry(label_frame, width=30)
        contact.grid(column=1, row=4, sticky="NESW")

        return [[name_label, address_label, phone_label, contact_label],
                [combobox, name, address, phone, contact]]

    def draw_dates(self, pos_x, pos_y, span_x, span_y):
        # ui for date widget
        self.label_frame_dates = tk.LabelFrame(text="About Dates")
        self.label_frame_dates.grid(column=pos_x,
                                    row=pos_y,
                                    columnspan=span_x,
                                    rowspan=span_y,
                                    padx=10,
                                    pady=10,
                                    sticky="NEW")

        # date labels

        self.date_client = tk.Label(self.label_frame_dates,
                                    text="Client",
                                    font=BASICFONT)
        self.date_client.grid(column=0, row=0, sticky="W")
        self.date_required = tk.Label(self.label_frame_dates,
                                      text="Requested",
                                      font=BASICFONT)
        self.date_required.grid(column=0, row=1, sticky="w")
        self.date_ship = tk.Label(self.label_frame_dates,
                                  text="Shipment",
                                  font=BASICFONT)
        self.date_ship.grid(column=0, row=2, sticky="w")

        self.entry_client = DateEntry(self.label_frame_dates, font=ENTRYFONT)
        self.entry_client.grid(column=1, row=0, sticky="w")

        self.entry_required = DateEntry(self.label_frame_dates, font=ENTRYFONT)
        self.entry_required.grid(column=1, row=1, sticky="w")

        self.entry_ship = DateEntry(self.label_frame_dates, font=ENTRYFONT)
        self.entry_ship.grid(column=1, row=2, sticky="w")

    def draw_tasks(self, length, pos_x, pos_y, span_x, span_y):
        """
        draws tasks in this format Task:
            goal(string)  |  checkbox(bool)  |  target date(date)
        :parameter: length: (integer) tells how any tasks to draw

        """
        self.tasks = []
        self.label_frame_tasks = tk.LabelFrame(text="Tasks")
        self.label_frame_tasks.grid(column=pos_x,
                                    row=pos_y,
                                    columnspan=span_x,
                                    rowspan=span_y,
                                    padx=10,
                                    pady=10)
        self.task_label = tk.Label(self.label_frame_tasks, text="Tasks")
        self.task_label.grid(column=0, row=0)
        self.done_label = tk.Label(self.label_frame_tasks, text="Done")
        self.done_label.grid(column=1, row=0)
        self.task_date_label = tk.Label(self.label_frame_tasks, text="Date")
        self.task_date_label.grid(column=2, row=0)
        self.task_date_must_label = tk.Label(self.label_frame_tasks,
                                             text="Must Date")
        self.task_date_must_label.grid(column=3, row=0)
        for i in range(0, length):
            entry = tk.Entry(self.label_frame_tasks, width="75")
            entry.grid(column=0, row=i + 1)

            check = tk.BooleanVar()
            check_button = tk.Checkbutton(self.label_frame_tasks, var=check)
            check_button.grid(column=1, row=i + 1)

            date = DateEntry(self.label_frame_tasks, width="25")
            date.grid(column=2, row=i + 1)
            date.configure(state="readonly")
            date_must = DateEntry(self.label_frame_tasks, width="25")
            date_must.grid(column=3, row=i + 1)
            date_must.configure(state="readonly")
            self.tasks.append([entry, check_button, date, check, date_must])

    def draw_notes(self, pos_x, pos_y, span_x, span_y):

        self.notes_frame = tk.LabelFrame(text="Notes")
        self.notes_frame.grid(column=pos_x,
                              row=pos_y,
                              columnspan=span_x,
                              rowspan=span_y,
                              sticky="NESW")
        self.notes = tk.Text(self.notes_frame,
                             height=9,
                             width=35,
                             font=ENTRYFONT)

        self.notes.grid(column=0, row=0)

    def update_customer_info(self, event):
        data = request_partner_info(CUSTOMER_DB,
                                    self.customer_info[1][0].get())
        if data is None:
            pass
        else:
            self.activate_info_entries(CUSTOMER)
            for n, d in data:
                self.customer_info[1][n + 1].delete(0, tk.END)
                self.customer_info[1][n + 1].insert(0, str(d))
            self.deactivate_info_entries(CUSTOMER, include=False)
            # return [[name_label, address_label, phone_label, contact_label],
            # [combobox, name, address, phone, contact]]

    def update_customer_combobox(self):
        """
        updates info on customer frame
        """
        tmp = []
        for i in request_partners(CUSTOMER_DB):
            tmp.append(i["name"])
        self.customer_info[1][0].configure(values=tmp)

    def update_vendor_combobox(self):
        tmp = []
        for i in request_partners(VENDOR_DB):
            tmp.append(i["name"])
        self.vendor_info[1][0].configure(values=tmp)

    def update_vendor_info(self, event):
        data = request_partner_info(VENDOR_DB, self.vendor_info[1][0].get())
        if data is None:
            pass
        else:
            self.activate_info_entries(VENDOR)
            for n, d in enumerate(data):
                self.vendor_info[1][n + 1].delete(0, tk.END)
                self.vendor_info[1][n + 1].insert(1, str(d))
            self.deactivate_info_entries(VENDOR, include=False)

    def update_by_docket(self, event, docket=None):
        # this method parses widget text because of the explained below
        """
            found intersting bug(probably just the thing that not all people know) in python
            if you bind label(may work with other widgets) in a loop(which uses range(0,somenumber))
            with the callback the last value of i or other iterator will be passed to function!
        """

        self.set_active()
        self.clear_tasks()

        # docket, customer, vendor, completed_tasks, date_client, date_require,
        # date_shipment, tasks, note, delivery address
        data = None
        if docket is None:
            docket = int(event.widget["text"].split("\n")[0].split(" ")[2])
            data = request_by_docket(docket)
        else:
            data = request_by_docket(docket)
        if data is None:
            # create a message that will say that something wrong was inputed
            self.clear_entries()
            self.clear_by_partner(CUSTOMER)
            self.clear_by_partner(VENDOR)
            self.clear_tasks()

        else:
            print(data)
            func = lambda: update_docket(docket, self.read_tasks())
            self.btn_submit.configure(command=func)
            # fields in dictionary are the same as fields in docket
            # update customer info
            self.customer_info[1][0].current(
                self.customer_info[1][0]["values"].index((data["customer"])))
            self.update_customer_info(None)
            # none instead of event as update does
            # not depend on event variables
            # update vendor info
            self.vendor_info[1][0].current(
                self.vendor_info[1][0]["values"].index((data["vendor"])))
            self.update_vendor_info(None)
            # update dates

            self.insert_dates([
                data["date_client"], data["date_request"], data["date_shipmet"]
            ])

            # update tasks dont forget that
            # at some point it should turn from bytes -> tuple -> string

            self.update_tasks(data["tasks"])
            # update notes
            self.update_notes(data["note"])
            # update delivery address
            self.update_delivery_address(data["delivery_address"])
        self.readonly_mode()

    def update_notes(self, text):
        self.notes.delete(1.0, tk.END)
        self.notes.insert(1.0, text)

    def update_delivery_address(self, text):
        self.entry_del_address.delete(0, tk.END)
        self.entry_del_address.insert(0, text)

    def readonly_mode(self):
        self.deactivate_info_entries(CUSTOMER)
        self.deactivate_info_entries(VENDOR)
        self.entry_client.configure(state="disabled")
        self.entry_del_address.configure(state="readonly")
        self.entry_required.configure(state="disabled")
        self.entry_ship.configure(state="disabled")
        for i in self.tasks:
            if not i[0].get() and not i[0].get().isspace() and i[0].get(
            ) is not None:
                i[0].configure(state="normal")
                i[2].configure(state="readonly")
                i[1].configure(state="normal")
            else:
                if i[1] == 1:
                    i[1].configure(state="disabled")
                else:
                    i[0].configure(state="normal")
                i[0].configure(state="disabled")
                i[2].configure(state="disabled")

        self.notes.configure(state="disabled")

    def read_tasks(self):
        done_tasks = True
        tasks = ""
        for task, done, date, check, date_must in self.tasks:

            if task.get() and not task.get().isspace() and not (task.get() is
                                                                None):

                if not check.get():
                    done_tasks = False

                if check.get():
                    check = 1
                else:
                    check = 0
                tasks = tasks + "" + task.get() + "|" + str(
                    check) + "|" + date.get() + "|" + date_must.get()
        return [tasks, done_tasks]

    def read_delivery_entries(self):
        # self.update_dockets_list()
        self.btn_submit.configure(command=None)
        self.set_active()
        data = []
        data.append(self.customer_info[1][0].get())
        data.append(self.vendor_info[1][0].get())
        tasks, done = self.read_tasks()
        data.append(done)
        data.append(time_format(self.entry_client.get()))
        data.append(time_format(self.entry_required.get()))
        data.append(time_format(self.entry_ship.get()))
        data.append(tasks)
        data.append(self.notes.get(1.0, tk.END))
        data.append(self.entry_del_address.get())
        self.readonly_mode()
        submit_delivery(data)

    def after_action_update(self):
        self.update_customer_combobox()
        self.update_vendor_combobox()

    def insert_dates(self, dates):
        self.entry_client.delete(0, tk.END)
        self.entry_ship.delete(0, tk.END)
        self.entry_required.delete(0, tk.END)

        self.entry_client.insert(0, dates[0])
        self.entry_required.insert(0, dates[1])
        self.entry_ship.insert(0, dates[2])

    def clear_tasks(self):
        for i in self.tasks:
            i[0].delete(0, tk.END)
            i[1].deselect()
            i[2].delete(0, tk.END)

    def clear_entries(self):
        self.insert_dates([0, 0, 0])
        self.entry_client.delete(0, tk.END)
        self.entry_del_address.delete(0, tk.END)
        self.entry_required.delete(0, tk.END)
        self.entry_ship.delete(0, tk.END)
        self.clear_tasks()
        self.notes.delete(1.0, tk.END)
        self.vendor_info[1][0].current(0)
        self.customer_info[1][0].current(0)

    def clear_by_partner(self, partner):
        if partner == CUSTOMER:
            for i in self.vendor_info[1]:
                i.delete(0, tk.END)
        if partner == VENDOR:
            for i in self.customer_info[1]:
                i.delete(0, tk.END)

    def set_active(self):
        self.activate_info_entries(CUSTOMER)
        self.activate_info_entries(VENDOR)
        self.entry_client.configure(state="readonly")
        self.entry_del_address.configure(state="normal")
        self.entry_required.configure(state="readonly")
        self.entry_ship.configure(state="readonly")
        for i in self.tasks:
            i[0].configure(state="normal")
            i[1].configure(state="normal")
            i[2].configure(state="readonly")
        self.notes.configure(state="normal")

    def activate_info_entries(self, partner):
        if partner == CUSTOMER:
            data = self.customer_info[1]
        elif partner == VENDOR:
            data = self.vendor_info[1]
        for i in data[1:]:
            i.configure(state="normal")
        data[0].configure(state="readonly")

    def deactivate_info_entries(self, partner, include=True):
        """
        CHANGE SIMILAR SSTATEMENTS ON THIS
        IF .... CUSOTMER:
            DATA = SELF.CUSTOMER
        FOR I IN DATA:
            ....
        """
        if include:
            if partner == CUSTOMER:
                data = self.customer_info[1]
            elif partner == VENDOR:
                data = self.vendor_info[1]
            for i in data[1:]:
                i.configure(state="disabled")

            data[0].configure(state="disabled")

    def update_tasks(self, text):
        if text is None:
            return None
        text = text.split("\n")
        #text.remove("")
        self.clear_tasks()
        for num, obj in enumerate(text):
            obj = obj.split("|")
            self.tasks[num][0].delete(0, tk.END)
            self.tasks[num][0].insert(0, obj[0])
            self.tasks[num][3].set(int(obj[1]))
            self.tasks[num][2].delete(0, tk.END)
            self.tasks[num][2].insert(0, obj[2])
            self.tasks[num][4].delete(0, tk.END)
            self.tasks[num][4].insert(0, obj[3])

    def read_partner(self, partner):
        self.btn_submit.configure(command=None)
        data = None
        if partner == CUSTOMER:
            data = self.customer_info[1]
        elif partner == VENDOR:
            data = self.vendor_info[1]
        submit_data = []
        for i in data[1:]:
            submit_data.append(str(i.get()))
        submit_partner(submit_data, partner)
        self.clear_entries()
        self.update_customer_combobox()
        self.update_vendor_combobox()

    def new_partner(self, partner):
        self.set_active()
        self.clear_entries()
        self.readonly_mode()
        self.activate_info_entries(VENDOR)
        self.activate_info_entries(CUSTOMER)

        self.clear_by_partner(VENDOR)
        self.clear_by_partner(CUSTOMER)
        if partner == VENDOR:
            self.deactivate_info_entries(CUSTOMER)
        elif partner == CUSTOMER:
            self.deactivate_info_entries(VENDOR)
        self.btn_submit.configure(command=lambda: self.read_partner(partner))
Esempio n. 18
0
class StudentApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Student Management System")
        self.geometry("800x750")
        self.resizable(0, 0)
        self.Title = tk.Label(self,
                              text="سیستم مدیریت دانشجویی",
                              font=("Helvetica", 16),
                              fg="green")
        self.FName = tk.Label(self,
                              text="نام:",
                              font=("Helvetica", 10),
                              bg="white",
                              fg="black")
        self.LName = tk.Label(self,
                              text="نام خانوادگی:",
                              font=("Helvetica", 10),
                              bg="white",
                              fg="black")
        self.UnitId = tk.Label(self,
                               text="کد ملی:",
                               font=("Helvetica", 10),
                               bg="white",
                               fg="black")
        self.ContactNo = tk.Label(self,
                                  text="شماره تماس:",
                                  font=("Helvetica", 10),
                                  bg="white",
                                  fg="black")
        self.City = tk.Label(self,
                             text="شهر:",
                             font=("Helvetica", 10),
                             bg="white",
                             fg="black")
        self.State = tk.Label(self,
                              text="استان:",
                              font=("Helvetica", 10),
                              bg="white",
                              fg="black")
        self.DOB = tk.Label(self,
                            text="تاریخ تولد:",
                            font=("Helvetica", 10),
                            bg="white",
                            fg="black")
        self.Select = tk.Label(
            self,
            text=
            "لطفا یکی از رکورد های زیر را برای آپدیت یا پاک کردن انتخاب کنید",
            font=("Helvetica", 10),
            bg="white",
            fg="black")
        self.Search = tk.Label(self,
                               text="لطفا شماره ردیف را وارد کنید:",
                               font=("Helvetica", 10),
                               bg="white",
                               fg="black")
        # Create Entry for Input Data
        self.entFName = tk.Entry(self)
        self.entLName = tk.Entry(self)
        self.entUnit = tk.Entry(self)
        self.entContact = tk.Entry(self)
        self.entCity = tk.Entry(self)
        self.entState = tk.Entry(self)
        self.calDOB = DateEntry(self,
                                width=12,
                                background='darkblue',
                                foreground='white',
                                borderwidth=2,
                                year=1950,
                                locale='en_US',
                                date_pattern='y-mm-dd')
        # self.entDOB = tk.Entry(self)
        self.entSearch = tk.Entry(self)

        # Create Button for Submit or ... Data's
        self.btn_register = tk.Button(self,
                                      text="ثبت",
                                      font=("Helvetica", 11),
                                      bg="green",
                                      fg="black",
                                      command=self.register_student)
        self.btn_update = tk.Button(self,
                                    text="آپدیت",
                                    font=("Helvetica", 11),
                                    bg="lightgreen",
                                    fg="black",
                                    command=self.update_student_data)
        self.btn_delete = tk.Button(self,
                                    text="پاک کردن",
                                    font=("Helvetica", 11),
                                    bg="yellow",
                                    fg="black",
                                    command=self.delete_student_data)
        self.btn_clear = tk.Button(self,
                                   text="دیلیت رکورد",
                                   font=("Helvetica", 11),
                                   bg="red",
                                   fg="black",
                                   command=self.clear_form)
        self.btn_show_all = tk.Button(self,
                                      text="نمایش همه",
                                      font=("Helvetica", 11),
                                      bg="blue",
                                      fg="black",
                                      command=self.load_student_data)
        self.btn_search = tk.Button(self,
                                    text="جست و جو",
                                    font=("Helvetica", 11),
                                    bg="lightblue",
                                    fg="black",
                                    command=self.show_search_record)
        self.btn_exit = tk.Button(self,
                                  text="خروج",
                                  font=("Helvetica", 16),
                                  bg="brown",
                                  fg="white",
                                  command=self.exit)
        # Title of Table Show Student's Data
        columns = ("#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8")
        self.tvStudent = ttk.Treeview(self,
                                      show="headings",
                                      height="5",
                                      columns=columns)
        self.tvStudent.heading('#1', text='شماره ردیف', anchor='center')
        self.tvStudent.column('#1', width=80, anchor='center', stretch=False)
        self.tvStudent.heading('#2', text='نام', anchor='center')
        self.tvStudent.column('#2', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#3', text='نام خانوادگی', anchor='center')
        self.tvStudent.column('#3', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#4', text='کد ملی', anchor='center')
        self.tvStudent.column('#4', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#5', text='شهر', anchor='center')
        self.tvStudent.column('#5', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#6', text='استان', anchor='center')
        self.tvStudent.column('#6', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#7', text='شماره تماس', anchor='center')
        self.tvStudent.column('#7', width=10, anchor='center', stretch=True)
        self.tvStudent.heading('#8', text='تاریخ تولد', anchor='center')
        self.tvStudent.column('#8', width=10, anchor='center', stretch=True)

        # Scroll bars are set up below considering placement position(x&y) ,height and width of treeview widget
        vsb = ttk.Scrollbar(self,
                            orient=tk.VERTICAL,
                            command=self.tvStudent.yview)
        vsb.place(x=40 + 640 + 1, y=310, height=180 + 20)
        self.tvStudent.configure(yscroll=vsb.set)
        hsb = ttk.Scrollbar(self,
                            orient=tk.HORIZONTAL,
                            command=self.tvStudent.xview)
        hsb.place(x=40, y=310 + 200 + 1, width=620 + 20)
        self.tvStudent.configure(xscroll=hsb.set)
        self.tvStudent.bind("<<TreeviewSelect>>", self.show_selected_record)
        # Create A plase of label's
        self.Title.place(x=250, y=10, height=27, width=300)
        self.FName.place(x=206, y=40, height=23, width=100)
        self.LName.place(x=207, y=70, height=23, width=100)
        self.UnitId.place(x=203, y=100, height=23, width=104)
        self.ContactNo.place(x=203, y=130, height=23, width=104)
        self.City.place(x=242, y=160, height=23, width=65)
        self.State.place(x=236, y=190, height=23, width=71)
        self.DOB.place(x=180, y=220, height=23, width=128)
        self.Select.place(x=197, y=280, height=23, width=400)
        self.Search.place(x=170, y=560, height=23, width=134)
        # Create A plase of Entry's
        self.entFName.place(x=330, y=40, height=21, width=186)
        self.entLName.place(x=330, y=70, height=21, width=186)
        self.entUnit.place(x=330, y=100, height=21, width=186)
        self.entContact.place(x=330, y=130, height=21, width=186)
        self.entCity.place(x=330, y=160, height=21, width=186)
        self.entState.place(x=330, y=190, height=21, width=186)
        self.calDOB.place(x=330, y=220, height=21, width=186)
        # Create A plase of Buttons's
        self.entSearch.place(x=310, y=560, height=21, width=186)
        self.btn_register.place(x=200, y=245, height=25, width=76)
        self.btn_update.place(x=280, y=245, height=25, width=76)
        self.btn_delete.place(x=360, y=245, height=25, width=76)
        self.btn_clear.place(x=440, y=245, height=25, width=76)
        self.btn_show_all.place(x=520, y=245, height=25, width=76)
        self.btn_search.place(x=505, y=558, height=26, width=60)
        self.btn_exit.place(x=720, y=610, height=31, width=60)
        self.tvStudent.place(x=80, y=310, height=200, width=600)
        # Create Table & load Student Data
        self.create_table()
        self.load_student_data()

    # clear Form's
    def clear_form(self):
        self.entFName.delete(0, tk.END)
        self.entLName.delete(0, tk.END)
        self.entUnit.delete(0, tk.END)
        self.entContact.delete(0, tk.END)
        self.entCity.delete(0, tk.END)
        self.entState.delete(0, tk.END)
        self.calDOB.delete(0, tk.END)

    # Exit from Task
    def exit(self):
        MsgBox = mb.askquestion('خروج از برنامه',
                                'آیا مطمئن هستید که میخواهید خارج شوید',
                                icon='warning')
        if MsgBox == 'yes':
            self.destroy()

    # Delete Student Data From DB
    def delete_student_data(self):
        MsgBox = mb.askquestion('پاک کردن رکورد',
                                'آیا از پاک کردن رکورد مطمئن هستید؟',
                                icon='warning')
        if MsgBox == 'yes':
            if db_connection.is_connected() == False:
                db_connection.connect()
            db_cursor.execute("use Student")  # Interact with Student Database
            # deleteing selected student record
            Delete = "delete from student_master where RollNo='%s'" % (roll_no)
            db_cursor.execute(Delete)
            db_connection.commit()
            mb.showinfo("Information", "رکورد دانشجوی مورد نظر پاک شد")
            self.load_student_data()
            self.entFName.delete(0, tk.END)
            self.entLName.delete(0, tk.END)
            self.entUnit.delete(0, tk.END)
            self.entContact.delete(0, tk.END)
            self.entCity.delete(0, tk.END)
            self.entState.delete(0, tk.END)
            self.calDOB.delete(0, tk.END)

    # Create Table in DB
    def create_table(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        # executing cursor with execute method and pass SQL query
        db_cursor.execute("CREATE DATABASE IF NOT EXISTS Student"
                          )  # Create a Database Named Student
        db_cursor.execute("use Student")  # Interact with Student Database
        # creating required tables
        db_cursor.execute(
            "create table if not exists Student_master(Id INT(11) NOT NULL  PRIMARY KEY AUTO_INCREMENT,rollno INT(15),fname VARCHAR(30),lname VARCHAR(30),meli VARCHAR(11), city VARCHAR(20),state VARCHAR(30),mobileno VARCHAR(11),dob date)AUTO_INCREMENT=1"
        )
        db_connection.commit()

    # Add Student To Data Base
    def register_student(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        fname = self.entFName.get()  # Retrieving entered first name
        lname = self.entLName.get()  # Retrieving entered last name
        unit_id = self.entUnit.get()  # # Retrieving entered code number
        contact_no = self.entContact.get()  # Retrieving entered contact number
        city = self.entCity.get()  # Retrieving entered city name
        state = self.entState.get()  # Retrieving entered state name
        dob = self.calDOB.get()  # Retrieving choosen date
        # validating Entry Widgets
        if fname == "":
            mb.showinfo('Information', "لطفا نام را وارد کنید")
            self.entFName.focus_set()
            return
        if lname == "":
            mb.showinfo('Information', "لطفا نام خانوادگی را وارد کنید")
            self.entLName.focus_set()
            return
        if unit_id == "":
            mb.showinfo('Information', "لطفا کد ملی را وارد کنید")
            self.entUnit.focus_set()
            return
        if contact_no == "":
            mb.showinfo('Information', "لطفا شماره تماس را وارد کنید")
            self.entContact.focus_set()
            return
        if city == "":
            mb.showinfo('Information', "لطفا نام شهر را وارد کنید")
            self.entCity.focus_set()
            return
        if state == "":
            mb.showinfo('Information', "لطفا نام استان را وارد کنید")
            self.entState.focus_set()
            return
        if dob == "":
            mb.showinfo('Information', "لطفا تاریخ تولد را انتخاب کنید")
            self.calDOB.focus_set()
            return

        # Inserting record into student_master table of student database
        try:
            rollno = int(self.fetch_max_roll_no())
            print("New Student Id: " + str(rollno))
            query2 = "INSERT INTO student_master (rollno, fname,lname,city,state,meli,mobileno,dob) VALUES (%s, %s,%s,%s, %s,%s, %s, %s)"
            # implement query Sentence
            db_cursor.execute(
                query2,
                (rollno, fname, lname, city, state, unit_id, contact_no, dob))
            mb.showinfo('Information', "دانشجو با موفقیت ثبت شد")
            # Submit to database for execution
            db_connection.commit()
            self.load_student_data()
        except mysql.connector.Error as err:
            print(err)
            # Rollback in case there is any error
            db_connection.rollback()
            mb.showinfo('Information', "داده های وارد شده با خطا مواجه شد!!!")
        finally:
            db_connection.close()

    def fetch_max_roll_no(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        db_cursor.execute("use Student")  # Interact with Student Database
        rollno = 0
        query1 = "SELECT rollno FROM student_master order by  id DESC LIMIT 1"
        # implement query Sentence
        db_cursor.execute(query1)  # Retrieving maximum student id no
        print("No of Record Fetched:" + str(db_cursor.rowcount))
        if db_cursor.rowcount == 0:
            rollno = 1
        else:
            rows = db_cursor.fetchall()
            for row in rows:
                rollno = row[0]
            rollno = rollno + 1
        print("Max Student Id: " + str(rollno))
        return rollno

    # show Record From DB If Search that
    def show_search_record(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        s_roll_no = self.entSearch.get()  # Retrieving entered first name
        print(s_roll_no)
        if s_roll_no == "":
            mb.showinfo('Information', "لطفا مقداری را وارد نمایید!!!")
            self.entSearch.focus_set()
            return
        self.tvStudent.delete(
            *self.tvStudent.get_children())  # clears the treeview tvStudent
        # Inserting record into student_master table of student database
        db_cursor.execute("use Student")  # Interact with Bank Database
        sql = "SELECT rollno,fname,lname,city,state,mobileno,date_format(dob,'%d-%m-%Y') FROM student_master where rollno='" + s_roll_no + "'"
        db_cursor.execute(sql)
        total = db_cursor.rowcount
        # if total ==0:
        # mb.showinfo("Info", "Nothing To Display,Please add data")
        # return
        print("Total Data Entries:" + str(total))
        rows = db_cursor.fetchall()

        RollNo = ""
        First_Name = ""
        Last_Name = ""
        Unit_Meli = ""
        City = ""
        State = ""
        Phone_Number = ""
        DOB = ""
        for row in rows:
            RollNo = row[0]
            First_Name = row[1]
            Last_Name = row[2]
            City = row[3]
            State = row[4]
            Unit_Meli = row[5]
            Phone_Number = row[6]
            DOB = row[7]
            print(Phone_Number)
            self.tvStudent.insert("",
                                  'end',
                                  text=RollNo,
                                  values=(RollNo, First_Name, Last_Name, City,
                                          State, Unit_Meli, Phone_Number, DOB))

    # show Selection Record From DataBase
    def show_selected_record(self, event):
        self.clear_form()
        for selection in self.tvStudent.selection():
            item = self.tvStudent.item(selection)
        global roll_no
        roll_no, first_name, last_name, city, state, unit_id, contact_no, dob = item[
            "values"][0:8]
        self.entFName.insert(0, first_name)
        self.entLName.insert(0, last_name)
        self.entCity.insert(0, city)
        self.entState.insert(0, state)
        self.entUnit.insert(0, unit_id)
        self.entContact.insert(0, contact_no)
        self.calDOB.insert(0, dob)
        return roll_no

    # Update Recourd of Student in DataBase
    def update_student_data(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        print("Updating")
        db_cursor.execute("use Student")  # Interact with Student Database
        First_Name = self.entFName.get()
        Last_Name = self.entLName.get()
        Unit_Meli = self.entUnit.get()
        Phone_Number = self.entContact.get()
        City = self.entCity.get()
        State = self.entState.get()
        DOB = self.calDOB.get()
        print(roll_no)
        Update = "Update student_master set fname='%s', lname='%s', meli='%s' , mobileno='%s', city='%s', state='%s', dob='%s' where rollno='%s'" % (
            First_Name, Last_Name, Unit_Meli, Phone_Number, City, State, DOB,
            roll_no)
        db_cursor.execute(Update)
        db_connection.commit()
        mb.showinfo("Info", "رکورد دانشجوی انتخاب شده با موفقیت به روز شد")
        # show all
        self.load_student_data()

    # load Student Data From Database
    def load_student_data(self):
        if db_connection.is_connected() == False:
            db_connection.connect()
        self.calDOB.delete(0, tk.END)  # clears the date entry widget
        self.tvStudent.delete(
            *self.tvStudent.get_children())  # clears the treeview tvStudent
        # Inserting record into student_master table of student database
        db_cursor.execute("use Student")  # Interact with Bank Database
        sql = "SELECT rollno,fname,lname,city,state,meli,mobileno,date_format(dob,'%d-%m-%Y') FROM student_master"
        db_cursor.execute(sql)
        total = db_cursor.rowcount
        # if total ==0:
        # mb.showinfo("Info", "Nothing To Display,Please add data")
        # return
        print("Total Data Entries:" + str(total))
        rows = db_cursor.fetchall()

        RollNo = ""
        First_Name = ""
        Last_Name = ""
        City = ""
        State = ""
        Unit_Meli = ""
        Phone_Number = ""
        DOB = ""
        for row in rows:
            RollNo = row[0]
            First_Name = row[1]
            Last_Name = row[2]
            City = row[3]
            State = row[4]
            Unit_Meli = row = [5]
            Phone_Number = row[6]
            DOB = row[7]
            self.tvStudent.insert("",
                                  'end',
                                  text=RollNo,
                                  values=(RollNo, First_Name, Last_Name, City,
                                          State, Phone_Number, DOB))
class Funcionario_view(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.criar_widget_funcionario()
        self.funcionario = Funcionario("", 0, 0, "", "", "", 0)

    def criar_widget_funcionario(self):
        # Título
        self.container_titulo = tk.Frame(self.master)
        self.container_titulo["pady"] = 10
        self.container_titulo["padx"] = 20
        self.container_titulo.pack()

        self.titulo_dados = tk.Label(self.container_titulo, text="CADASTRAR NOVO FUNCIONÁRIO")
        self.titulo_dados.pack()

        # Campo id
        self.container_id = self.criar_container_padrao()

        self.id_label = tk.Label(self.container_id, text="Id")
        self.id_label["width"] = 20
        self.id_label["anchor"] = tk.NW
        self.id_label.pack(side=tk.LEFT)

        self.id = tk.Entry(self.container_id)
        self.id["width"] = 10
        self.id.pack(side=tk.LEFT)

        self.botao_buscar = tk.Button(self.container_id)
        self.botao_buscar["text"] = "Buscar"
        self.botao_buscar["command"] = self.buscar_funcionario
        self.botao_buscar.pack(side=tk.LEFT)

        # Campo nome
        self.container_nome = self.criar_container_padrao()

        self.nome_label = tk.Label(self.container_nome, text="Nome")
        self.nome_label["width"] = 20
        self.nome_label["anchor"] = tk.NW
        self.nome_label.pack(side=tk.LEFT)

        self.nome = tk.Entry(self.container_nome)
        self.nome["width"] = 20
        self.nome.pack(side=tk.LEFT)

        # Campo nascimento
        self.container_nascimento = self.criar_container_padrao()

        self.nascimento_label = tk.Label(self.container_nascimento, text="Data de nascimento")
        self.nascimento_label["width"] = 20
        self.nascimento_label["anchor"] = tk.NW
        self.nascimento_label.pack(side=tk.LEFT)

        self.nascimento = DateEntry(self.container_nascimento, width=18, background='darkblue',
                                    foreground='white', borderwidth=2)
        self.nascimento.pack(side=tk.LEFT)

        # Campo sexo
        self.container_sexo = self.criar_container_padrao()

        self.sexo_label = tk.Label(self.container_sexo, text="Sexo")
        self.sexo_label["width"] = 20
        self.sexo_label["anchor"] = tk.NW
        self.sexo_label.pack(side=tk.LEFT)

        self.sexo = tk.StringVar(self.container_sexo)
        self.sexo.set("")  # default value
        self.sexo_combo = tk.OptionMenu(self.container_sexo, self.sexo, "Masculino", "Feminino", "")
        self.sexo_combo["width"] = 15
        self.sexo_combo.pack(side=tk.LEFT)

        # Campo cargo
        self.container_cargo = self.criar_container_padrao()

        self.cargo_label = tk.Label(self.container_cargo, text="Cargo")
        self.cargo_label["width"] = 20
        self.cargo_label["anchor"] = tk.NW
        self.cargo_label.pack(side=tk.LEFT)

        self.cargo = tk.Entry(self.container_cargo)
        self.cargo["width"] = 20
        self.cargo.pack(side=tk.LEFT)

        # Campo qtde dependentes
        self.container_qtde_dependetes = self.criar_container_padrao()

        self.qtde_dependetes_label = tk.Label(self.container_qtde_dependetes, text="Dependentes")
        self.qtde_dependetes_label["width"] = 20
        self.qtde_dependetes_label["anchor"] = tk.NW
        self.qtde_dependetes_label.pack(side=tk.LEFT)

        self.qtde_dependetes = tk.StringVar(self.container_qtde_dependetes)
        self.qtde_dependetes.set("0")  # default value
        self.qtde_dependetes_combo = tk.OptionMenu(self.container_qtde_dependetes, self.qtde_dependetes, "0", "1", "2", "3", "4", "5")
        self.qtde_dependetes_combo["width"] = 15
        self.qtde_dependetes_combo.pack(side=tk.LEFT)

        # Botões
        self.container_botoes = self.criar_container_padrao()

        self.botao_criar = tk.Button(self.container_botoes)
        self.botao_criar["text"] = "Criar"
        self.botao_criar["command"] = self.add_funcionario
        self.botao_criar["bg"] = "blue"
        self.botao_criar["fg"] = "white"
        self.botao_criar.pack(side=tk.LEFT)

        self.botao_atualizar = tk.Button(self.container_botoes)
        self.botao_atualizar["text"] = "Atualizar"
        self.botao_atualizar["command"] = self.atualizar_funcionario
        self.botao_atualizar["bg"] = "green"
        self.botao_atualizar["fg"] = "white"
        self.botao_atualizar["state"] = "disabled"
        self.botao_atualizar.pack(side=tk.LEFT)

        self.botao_excluir = tk.Button(self.container_botoes)
        self.botao_excluir["text"] = "Excluir"
        self.botao_excluir["command"] = self.excluir_funcionario
        self.botao_excluir["bg"] = "red"
        self.botao_excluir["fg"] = "white"
        self.botao_excluir["state"] = "disabled"
        self.botao_excluir.pack(side=tk.LEFT)

        self.botao_limpar = tk.Button(self.container_botoes)
        self.botao_limpar["text"] = "Limpar"
        self.botao_limpar["command"] = self.limpar_tela
        self.botao_limpar.pack()

        # Mensagem
        self.container_mensagem = self.criar_container_padrao()

        self.mensagem = tk.Label(self.container_mensagem, text="")
        self.mensagem.pack()

    def criar_container_padrao(self):
        container = tk.Frame(self.master)
        container["padx"] = 20
        container["pady"] = 5
        container.pack()

        return container

    def add_funcionario(self):
        self.funcionario.nome = self.nome.get()
        self.funcionario.cargo = self.cargo.get()
        self.funcionario.id_setor = 0
        self.funcionario.qtd_dependentes = self.qtde_dependetes.get()
        self.funcionario.sexo = self.sexo.get()
        self.funcionario.data_nascimento = self.nascimento.get()
        self.funcionario.salario = 950

        status, id_gerado, mensagem = self.funcionario.insert_funcionario()

        if status:
            self.id.insert(0, id_gerado)
            self.botao_criar.config(state="disabled")
            self.botao_excluir.config(state="normal")
            self.botao_atualizar.config(state="normal")

        self.mensagem["text"] = mensagem

    def limpar_tela(self):
        self.id.delete(0, tk.END)
        self.nome.delete(0, tk.END)
        self.nascimento.delete(0, tk.END)
        self.cargo.delete(0, tk.END)
        self.sexo.set("")
        self.qtde_dependetes.set("0")
        self.mensagem["text"] = ""
        self.funcionario = Funcionario("", 0, 0, "", "", "", 0)

        self.botao_criar.config(state="normal")
        self.botao_excluir.config(state="disabled")
        self.botao_atualizar.config(state="disabled")

    def buscar_funcionario(self):
        status, mensagem = self.funcionario.select_funcionario(self.id.get())

        if status:
            self.nome.insert(0, self.funcionario.nome)
            self.nascimento.set_date(self.funcionario.data_nascimento)
            self.cargo.insert(0, self.funcionario.cargo)
            self.sexo.set(self.funcionario.sexo)
            self.qtde_dependetes.set(self.funcionario.qtd_dependentes)

            self.botao_criar.config(state="disabled")
            self.botao_excluir.config(state="normal")
            self.botao_atualizar.config(state="normal")
        else:
            self.limpar_tela()

        self.mensagem["text"] = mensagem

    def atualizar_funcionario(self):
        self.funcionario.nome = self.nome.get()
        self.funcionario.cargo = self.cargo.get()
        self.funcionario.id_setor = 0
        self.funcionario.qtd_dependentes = self.qtde_dependetes.get()
        self.funcionario.sexo = self.sexo.get()
        self.funcionario.data_nascimento = self.nascimento.get()
        self.funcionario.salario = 950

        status, mensagem = self.funcionario.update_funcionario()

        if status:
            self.limpar_tela()

        self.mensagem["text"] = mensagem

    def excluir_funcionario(self):
        self.funcionario.id_funcionario = self.id.get()
        status, mensagem = self.funcionario.delete_funcionario()

        if status:
            self.limpar_tela()

        self.mensagem["text"] = mensagem
Esempio n. 20
0
From_text = StringVar()
e1 = Entry(window, textvariable=From_text)
e1.grid(row=1, column=1)

to_text = StringVar()
e2 = Entry(window, textvariable=to_text)
e2.grid(row=2, column=1)

From_dt_text = StringVar()
e3 = DateEntry(window,
               width=15,
               date_pattern='dd-mm-yyyy',
               background='darkblue',
               foreground='white')
e3.grid(row=1, column=3)
e3.delete(0, END)

From_hrs_text = StringVar()
number_hrs = Combobox(window, width=4, textvariable=From_hrs_text)
number_hrs['values'] = (f"{0:02d}",f"{1:02d}",f"{2:02d}",f"{3:02d}",f"{4:02d}",f"{5:02d}",f"{6:02d}",f"{7:02d}",f"{8:02d}",f"{9:02d}",\
                        10,11,12,13,14,15,16,17,18,19,20,21,22,23)
number_hrs.grid(row=1, column=4)

From_min_text = StringVar()
number_min = Combobox(window, width=4, textvariable=From_min_text)
number_min['values'] = (f"{0:02d}",f"{1:02d}",f"{2:02d}",f"{3:02d}",f"{4:02d}",f"{5:02d}",f"{6:02d}",f"{7:02d}",f"{8:02d}",f"{9:02d}",\
                        10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59)
number_min.grid(row=1, column=5)

e4 = AutocompleteEntry(ctry_list2.keys(), window)
e4.grid(row=3, column=1)
Esempio n. 21
0
class CrudGui:
    is_editable = False

    def __init__(self, window):
        self.window = window
        self.window.title("CRUD SQLITE")
        self.window.resizable(0, 0)
        self.window.geometry('807x680')

        # Frame
        frame = LabelFrame(self.window, text='Estudiante')
        frame.grid(row=0, column=0, pady=10, columnspan=4, padx=30)

        # Document number Input
        Label(frame, text='Número de Documento: ', pady=15).grid(row=1, column=0, sticky=W)
        self.document_number = Entry(frame, width=31)
        self.document_number.focus()
        self.document_number.grid(row=1, column=1, ipady=3)

        # Name Input
        Label(frame, text='Nombre: ', pady=15).grid(row=2, column=0, sticky=W)
        self.name = Entry(frame, widt=31)
        self.name.focus()
        self.name.grid(row=2, column=1, ipady=3)

        # Date Input
        Label(frame, text='Fecha: ', pady=15).grid(row=3, column=0, sticky=W)
        self.date = DateEntry(frame, width=30, date_pattern='yyyy-mm-dd')
        self.date.grid(row=3, column=1, ipady=3)

        # Gender
        self.combo_value = StringVar()
        Label(frame, text='Género: ', pady=15).grid(row=4, column=0, sticky=W)
        self.gender = ttk.Combobox(frame, textvariable=self.combo_value, state="readonly", width=30)
        self.gender['values'] = ['Seleccione género', 'MASCULINO', 'FEMENINO', 'OTRO']
        self.gender.current(0)
        self.gender.grid(row=4, column=1, ipady=3)

        # Button Save Student
        self.button_text = StringVar()
        self.button_text.set('Crear estudiante')
        Button(frame, bg='#1976D2', fg='#FFFFFF', height=2,
               relief=RAISED, textvariable=self.button_text, command=self.save).grid(
            row=5, columnspan=4, sticky=W + E, pady=25)

        # Table
        self.table = ttk.Treeview(height=10, columns=('#0', '#1', '#2',))
        scrollbar = ttk.Scrollbar(orient=VERTICAL, command=self.table.yview)
        self.table.configure(yscrollcommand=scrollbar)
        self.table.grid(row=5, column=0, columnspan=2)
        self.table.heading('#0', text='N° Documento', anchor=CENTER)
        self.table.heading('#1', text='Nombre', anchor=CENTER)
        self.table.heading('#2', text='Fecha', anchor=CENTER)
        self.table.heading('#3', text='Género', anchor=CENTER)

        # Buttons
        Button(text='Borrar', command=self.delete, width=30, bg='#F44336', fg='#FFFFFF', height=2,
               relief=RAISED, ).grid(row=6, column=0, sticky=N, pady=15, padx=10)

        Button(text='Editar', command=self.edit, width=30, bg='#009688', fg='#FFFFFF', height=2,
               relief=RAISED, ).grid(row=6, column=1, sticky=N, pady=15, padx=10)

        Label(text='Elaborado por: Cristhian Forero', pady=5).grid(row=7, column=0, sticky=W)

        self.get_data()

    def validation_fields_rules(self):
        return len(self.document_number.get().strip()) != 0 and len(self.name.get().strip()) != 0 and len(
            self.date.get().strip()) != 0 and self.gender.get() != 'Seleccione género'

    def save(self):
        if self.validation_fields_rules():
            student = (
                self.document_number.get(),
                self.name.get(),
                datetime.strptime(str(self.date.get_date()), '%Y-%m-%d').date(),
                GenderEnum[self.combo_value.get()].value
            )

            if not match(r'^\d{1,14}$', self.document_number.get()):
                messagebox.showwarning('ERROR',
                                       'El campo "Número de documento" debe estar compuesto solo por números con un máximo de 14 dígitos')
                return

            if self.is_editable:
                update_student(student)
                messagebox.showinfo('OK', 'El estudiante ha sido actualizado :)')
                self.clear_fields()
            else:
                if get_student(self.document_number.get()).fetchone():
                    messagebox.showwarning('¡ALERTA!', 'Ya existe un estudiante registrado con ese número de documento')
                    return
                create_student(student)
                messagebox.showinfo('OK', 'El estudiante ha sido creado :)')
                self.clear_fields()

            self.get_data()
            self.is_editable = False

        else:
            messagebox.showwarning('¡ALERTA!', 'Todos los campos son requeridos')

    def get_data(self):
        rows = self.table.get_children()
        for item in rows:
            self.table.delete(item)

        students = get_students()

        for student in students:
            self.table.insert('', 0, text=student[0],
                              values=(student[1], student[2], GenderEnum(student[3]).name)
                              )

    def delete(self):
        if self.get_selected_data():
            document_number = self.get_selected_data().get('document_number')
            if messagebox.askokcancel('', '¿Desea borrar el registro?'):
                delete_student(document_number)
            self.clear_fields()
            self.get_data()

    def edit(self):
        if self.get_selected_data():
            self.clear_fields()
            self.button_text.set('Actualizar estudiante')
            self.document_number.insert(0, self.get_selected_data().get('document_number'))
            self.name.insert(0, self.get_selected_data().get('name'))
            self.date.set_date(self.get_selected_data().get('date'))
            self.gender.set(self.get_selected_data().get('gender'))
            self.is_editable = True

    def get_selected_data(self):
        document_number = self.table.item(self.table.selection()).get('text')
        if document_number == '':
            messagebox.showerror('ERROR', 'Por favor seleccione un registro.')
            return
        values = self.table.item(self.table.selection()).get('values')
        return {
            'document_number': document_number,
            'name': values[0],
            'date': values[1],
            'gender': values[2]
        }

    def clear_fields(self):
        self.document_number.focus()
        self.button_text.set('Crear estudiante')
        self.document_number.delete(0, END)
        self.name.delete(0, END)
        self.date.delete(0, END)
        self.gender.set('Seleccione género')
Esempio n. 22
0
class welcome:
    def __init__(self, user, window):
        self.window = window
        self.user_id = user
        self.user = user
        self.window.title('User Form')
        self.item_index = []

        self.my_connection = mysql.connector.connect(host='localhost',
                                                     user='******',
                                                     password='',
                                                     database='register')
        self.my_cursor = self.my_connection.cursor()
        self.search_by = StringVar()
        self.search_txt = StringVar()
        self.list2 = [{
            'name': 'Economy',
            'price': 3000
        }, {
            'name': 'Premium Economy',
            'price': 4000
        }, {
            'name': 'Business Class',
            'price': 5000
        }, {
            'name': 'First Class',
            'price': 6000
        }]
        # Get the names of the all flights name

        self.names = list(map(lambda x: x.get('name'), self.list2))

        self.window.geometry('1100x700+90+40')
        self.window.resizable(0, 0)
        self.bg = ImageTk.PhotoImage(
            file=
            'C:\\Users\\Dell\\PycharmProjects\\untitled3\\project\\Webp.net-resizeimage (4).jpg'
        )
        self.bg_Image = Label(self.window, image=self.bg).place(x=0,
                                                                y=0,
                                                                relwidth=1,
                                                                relheight=1)
        self.frame1 = Frame(self.window, bg='white')
        self.frame1.place(x=100, y=30, height=700, width=900)
        self.frame2 = Frame(self.frame1, bg='lightgrey')
        self.frame2.place(x=0, y=60, height=55, width=900)
        self.label_name = Label(self.frame1,
                                text="Book Flights",
                                font=('Impact', 20, 'bold'),
                                fg="#d77337",
                                bg='white')
        self.label_name.place(x=300, y=15)
        self.btn_return = Button(self.frame1,
                                 text="Return",
                                 relief=RAISED,
                                 bg='lightgrey',
                                 font=('arial', 14, 'bold'),
                                 fg='black',
                                 bd=0)
        self.btn_return.place(x=90, y=70)
        self.btn_oneway = Button(self.frame1,
                                 text="One way",
                                 relief=RAISED,
                                 bg='lightgrey',
                                 font=('arial', 14, 'bold'),
                                 fg='black',
                                 bd=0,
                                 command=self.open)
        self.btn_oneway.place(x=300, y=70)
        self.btn_exit = Button(self.frame1,
                               text="Exit",
                               relief=RAISED,
                               bg='lightgrey',
                               font=('arial', 14, 'bold'),
                               fg='red',
                               bd=0,
                               command=exit)
        self.btn_exit.place(x=510, y=70, width=100)
        self.label_where = Label(self.frame1,
                                 text="Where From:",
                                 font=('Goudy old style', 12, 'bold'),
                                 fg='grey',
                                 bg='white')
        self.label_where.place(x=60, y=130)
        self.ent_where = Entry(self.frame1,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_where.place(x=170, y=130, width=200, height=30)
        self.label_to = Label(self.frame1,
                              text="Where To:",
                              font=('Goudy old style', 12, 'bold'),
                              fg='grey',
                              bg='white')
        self.label_to.place(x=390, y=130)
        self.ent_to = Entry(self.frame1,
                            font=('times new roman', 9),
                            bg='lightgray')
        self.ent_to.place(x=490, y=130, width=200, height=30)
        self.label_dpt = Label(self.frame1,
                               text="Departure Date:",
                               font=('Goudy old style', 12, 'bold'),
                               fg='grey',
                               bg='white')
        self.label_dpt.place(x=50, y=180)

        self.ent_dpt = DateEntry(self.frame1,
                                 width=12,
                                 background='darkblue',
                                 foreground='white',
                                 state='readonly',
                                 borderwidth=2)
        self.ent_dpt.place(x=170, y=180, width=200)
        ttk.Button(self.frame1, text="ok")

        # self.ent_dpt = Entry(self.frame1, font=('times new roman', 9), bg='lightgray')
        # self.ent_dpt.place(x=170, y=200, width=200, height=30)
        self.label_date = Label(self.frame1,
                                text="Return date:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='grey',
                                bg='white')
        self.label_date.place(x=390, y=180)
        self.ent_date = DateEntry(self.frame1,
                                  width=12,
                                  background='darkblue',
                                  foreground='white',
                                  state='readonly',
                                  borderwidth=2)
        self.ent_date.place(x=490, y=180, width=200)
        ttk.Button(self.frame1, text="ok")

        self.combo = Label(self.frame1,
                           text='Age Selection',
                           font=('Goudy old style', 12, 'bold'),
                           bg='white',
                           fg='gray').place(x=50, y=230)
        self.txt_combo = ttk.Combobox(self.frame1,
                                      font=('times new roman', 9),
                                      state='readonly',
                                      justify=CENTER)
        self.txt_combo['values'] = ('Adult', 'Children', 'Infant', 'Old age')
        self.txt_combo.place(x=170, y=230, width=200)
        self.txt_combo.current(0)
        self.label_count = Label(self.frame1,
                                 text="Count:",
                                 font=('Goudy old style', 12, 'bold'),
                                 fg='grey',
                                 bg='white')
        self.label_count.place(x=390, y=230)
        self.ent_count = Entry(self.frame1,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_count.place(x=490, y=230, width=200, height=30)
        self.classcombo = Label(self.frame1,
                                text="Class Selection:",
                                font=('Goudy old style', 12, 'bold'),
                                fg='grey',
                                bg='white').place(x=50, y=280)
        self.txt_classcombo = ttk.Combobox(self.frame1,
                                           font=('times new roman', 9),
                                           state='readonly',
                                           justify=CENTER,
                                           values=self.names)
        self.txt_classcombo['values'] = ('Economy', 'Premium Economy',
                                         'Business Class', 'First Class')
        self.txt_classcombo.bind('<<ComboboxSelected>>', self.fetch_data)

        self.txt_classcombo.place(x=170, y=280)
        self.txt_classcombo.current(0)
        self.label_price = Label(self.frame1,
                                 text="Price:",
                                 font=('Goudy old style', 12, 'bold'),
                                 fg='grey',
                                 bg='white')
        self.label_price.place(x=390, y=280)
        self.flight = Label(self.frame1,
                            text="Flight Selection:",
                            font=('Goudy old style', 12, 'bold'),
                            fg='grey',
                            bg='white').place(x=50, y=320)
        self.txt_flight = ttk.Combobox(self.frame1,
                                       textvariable=self.search_by,
                                       font=('times new roman', 9),
                                       state='readonly',
                                       justify=CENTER)
        self.txt_flight['values'] = ('Buddha Air', 'Yeti Airlines',
                                     'Surya Airline', 'Nepal Airlines',
                                     'Tara Airlines')

        self.txt_flight.place(x=170, y=320)
        self.txt_flight.current(0)
        self.ent_price = Entry(self.frame1,
                               textvariable=self.search_txt,
                               font=('times new roman', 9),
                               bg='lightgray')
        self.ent_price.place(x=490, y=280, width=200, height=30)
        self.ent_price.insert(0, '3000')
        self.txt_search = Entry(self.frame1, font=('times new roman', 9))
        self.txt_search.place(x=400, y=320)
        self.combo_search = ttk.Combobox(self.frame1,
                                         font=('times new roman', 9),
                                         state='readonly',
                                         justify=CENTER)
        self.combo_search['values'] = ('flight_name', 'destination', 'source')
        self.combo_search.place(x=550, y=320)

        self.combo_search.current(0)
        self.btn_add = Button(self.frame1,
                              text="Search",
                              command=self.Search_Items)
        self.btn_add.place(x=710, y=320)

        self.btn_book = Button(self.frame1,
                               text="Book Flight",
                               relief=RAISED,
                               bg='green',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.book_flight)
        self.btn_book.place(x=50, y=590)
        self.btn_book = Button(self.frame1,
                               text="Cancel Flight",
                               relief=RAISED,
                               bg='red',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.delete_item)
        self.btn_book.place(x=220, y=590)
        self.book_tree = ttk.Treeview(
            self.frame1,
            columns=('ID', 'Where from', 'Where to', 'Departure Time',
                     'Return Date', 'Age Selection', 'Count', 'User_id',
                     'Price', 'Flight_Name'))
        self.book_tree.place(x=50, y=360)
        self.btn_book = Button(self.frame1,
                               text="Bill",
                               relief=RAISED,
                               bg='red',
                               font=('arial', 14, 'bold'),
                               fg='white',
                               command=self.generate_bill)
        self.btn_book.place(x=400, y=590)
        self.btn_update = Button(self.frame1,
                                 text="Update",
                                 relief=RAISED,
                                 bg='red',
                                 font=('arial', 14, 'bold'),
                                 fg='white',
                                 command=self.update)
        self.btn_update.place(x=600, y=590)
        # self.book_entry = Entry(self.frame1)
        # self.book_entry.grid(row=60, column=300)

        self.book_tree['show'] = 'headings'
        self.book_tree.column('ID', width=80)

        self.book_tree.column('Where from', width=80)
        self.book_tree.column('Where to', width=80)
        self.book_tree.column('Departure Time', width=80)
        self.book_tree.column('Return Date', width=80)
        self.book_tree.column('Age Selection', width=80)
        self.book_tree.column('Count', width=80)
        self.book_tree.column('User_id', width=80)
        self.book_tree.column('Price', width=80)
        self.book_tree.column('Flight_Name', width=80)
        self.book_tree.heading('ID', text="ID")
        self.book_tree.heading('Where from', text="Where from")
        self.book_tree.heading('Where to', text="Where to")
        self.book_tree.heading('Departure Time', text="Departure Time")
        self.book_tree.heading('Return Date', text="Return Date")
        self.book_tree.heading('Age Selection', text="Age Selection")
        self.book_tree.heading('Count', text="Count")
        self.book_tree.heading('User_id', text="User Id")
        self.book_tree.heading('Price', text="Price")
        self.book_tree.heading('Flight_Name', text="Flight_Name")
        self.show_in_treeview()

    def clear(self):
        self.ent_where.delete(0, END)
        self.ent_to.delete(0, END)
        self.ent_dpt.delete(0, END)
        self.ent_date.delete(0, END)
        self.txt_combo.set('')
        self.ent_count.delete(0, END)

    def update(self):
        selected_item = self.book_tree.selection()[0]
        self.item_index = self.book_tree.item(selected_item, 'text')
        item_data = self.book_tree.item(selected_item, 'values')

        if item_data[0] == '':
            messagebox.showerror('error', 'select a row')
        else:
            if form.Item_dlt().update_items(item_data[0], self.ent_where.get(),
                                            self.ent_to.get(),
                                            self.ent_dpt.get_date(),
                                            self.ent_date.get_date(),
                                            self.txt_combo.get(),
                                            self.ent_count.get(),
                                            self.txt_flight.get(),
                                            self.ent_price.get(),
                                            self.user_id):
                messagebox.showinfo("Item", "Item Updated")
                self.show_in_treeview()

            else:
                messagebox.showerror("Error", "Item cannot be added")

    def book_flight(self):

        if self.ent_where.get() == "" or self.ent_to.get(
        ) == "" or self.ent_dpt.get() == "" or self.ent_date.get(
        ) == "" or self.txt_combo.get() == "" or self.ent_count.get() == "":
            messagebox.showerror('Error', 'please enter all required fields')

        else:

            try:

                form.return_flight().form_reg(self.ent_where.get(),
                                              self.ent_to.get(),
                                              self.ent_dpt.get_date(),
                                              self.ent_date.get_date(),
                                              self.txt_combo.get(),
                                              self.ent_count.get(),
                                              self.user_id,
                                              self.ent_price.get(),
                                              self.txt_flight.get())

                messagebox.showinfo('success',
                                    'Register successfull',
                                    parent=self.window)
                self.show_in_treeview()
                self.clear()
            except Exception as e:
                messagebox.showerror('error',
                                     f'error:{str(e)}',
                                     parent=self.window)

    def show_in_treeview(self):
        try:

            row = form.return_flight().show_in_treeview(self.user_id)
            if len(row):

                self.book_tree.delete(*self.book_tree.get_children())

                for i in row:
                    self.book_tree.insert("",
                                          "end",
                                          text=i[0],
                                          value=(i[0], i[1], i[2], i[3], i[4],
                                                 i[5], i[6], i[7], i[8], i[9]))
                # self.my_connection.commit()
            self.book_tree.bind('<Double-1>', self.select_item)
        except Exception as e:
            messagebox.showerror('error',
                                 f'error:{str(e)}',
                                 parent=self.window)

    def select_item(self, event):
        selected_item = self.book_tree.selection()[0]
        self.item_index = self.book_tree.item(selected_item, 'text')
        item_data = self.book_tree.item(selected_item, 'values')
        dpt_date = datetime.datetime(int(item_data[3][0:4]),
                                     int(item_data[3][5:7]),
                                     int(item_data[3][8:10]))
        dpt_date_f = dpt_date.strftime('%m/%d/%y')

        return_date = datetime.datetime(int(item_data[4][0:4]),
                                        int(item_data[4][5:7]),
                                        int(item_data[4][8:10]))
        return_date_f = return_date.strftime('%m/%d/%y')

        self.ent_where.delete(0, END)
        self.ent_where.insert(0, item_data[1])
        self.ent_to.delete(0, END)
        self.ent_to.insert(0, item_data[2])

        self.ent_dpt.set_date(dpt_date_f)
        #self.ent_dpt.current()
        self.ent_date.set_date(return_date_f)
        #self.ent_date.current()
        self.txt_combo.set(item_data[5])
        self.txt_combo.current()
        self.ent_count.delete(0, END)
        self.ent_count.insert(0, item_data[6])
        self.txt_classcombo.set(item_data[7])
        self.txt_classcombo.current()

        self.ent_price.delete(0, END)
        self.ent_price.insert(0, item_data[8])

        self.txt_flight.set(item_data[9])
        self.txt_flight.current()

    def fetch_data(self, *args):

        va = filter(lambda x: x.get('name') == self.txt_classcombo.get(),
                    self.list2)

        self.ent_price.delete(0, END)
        self.ent_price.insert(0, next(va).get('price'))

    def open(self):

        self.window.withdraw()
        dd = Toplevel(self.window)
        Oneway.oneway(self.user_id, dd)

    def Search_Items(self):
        con = mysql.connector.connect(host='localhost',
                                      user='******',
                                      password='',
                                      database='register')
        cur = con.cursor()
        values = (
            str(self.search_by.get()),
            '"{}"'.format(str(self.search_txt.get() + '%')),
        )
        qry = (
            f"SELECT id,destination,source,dpt,date,combo,count_no,user_id,price,flight_name FROM book_flight WHERE user_id={self.user_id} AND {values[0]} LIKE {values[1]}"
        )
        cur.execute(qry)
        rows = cur.fetchall()

        if len(rows) != 0:
            self.book_tree.delete(*self.book_tree.get_children())

            for row in rows:
                self.book_tree.insert("", END, values=row)
            con.commit()

    def delete_item(self):
        selected_item = self.book_tree.selection()[0]

        item_data = self.book_tree.item(selected_item, 'text')

        index = item_data
        if form.Item_dlt().delete_items(index):
            messagebox.showinfo('Item', 'Item Deleted')
            self.show_in_treeview()

            # selected_item = self.item_tree.selection()
            # self.item_tree.delete(selected_item)

        else:
            messagebox.showerror("Error",
                                 "Item cannot be deleted",
                                 parent=self.window)

    def generate_bill(self):
        all_orders = self.book_tree.get_children()
        bill_list = []
        total = 0
        # tbl=self.order_tree.item(all_orders[0],'values')[0]
        # name=self.order_tree.item(all_orders[1],'values')[1]
        for i in all_orders:
            order = self.book_tree.item(i, 'values')
            amt = float(order[5]) * float(order[7])
            bill_list.append((order[1], order[2], order[3], order[4], order[5],
                              order[6], order[7], amt))
            total += amt
        BillView(bill_list, total, self.user)