class AppointmentInput(simpledialog.Dialog): def body(self, master): self.parent = master self.frame = tk.Frame(self.parent) self.resizable(width=False, height=False) self.storage = StorageDb('wfm.sqlite') self.settings = Settings() self.helper = Helper() self.init_variables() self.create_dispatcherEntries() self.frame.pack(expand=1, fill="both") def init_variables(self): self.value = tk.StringVar() self.description = tk.StringVar() self.active = tk.IntVar() self.selected_id = tk.IntVar() self.is_OK = tk.BooleanVar() self.TABLE = 'dispatchers' selected_table = self.settings.GetSetting('selected_table') # get selected id from settings if self.helper.is_notEmpty(selected_table): self.TABLE = selected_table action = self.settings.GetSetting('action_button') # get selected id from settings if action and action == 'EDIT': id = self.settings.GetSetting('selected_id') # get selected id from settings if id : row = self.storage.GetResults("select * from %s where id = %s" % (self.TABLE, id)) if len(row)>0: self.value.set(row[0]['value']) self.description.set(row[0]['description']) self.active.set(row[0]['active']) pass def create_dispatcherEntries(self): self.lbl_Header = tk.Label(self.frame, text="Appointment Search Options", font='Tahoma 8 bold', fg = 'gray') self.lbl_Header.grid(row=0, column=0, columnspan=4, sticky='W', padx=1, pady=6) self.lbl_Note = tk.Label(self.frame, text="Please provide your desired appointment search filter", fg ='green') self.lbl_Note.grid(row=1, column=0, columnspan=5, sticky='W', padx=5, pady=2) self.lbl_value = tk.Label(self.frame, text="Value:") self.lbl_value.grid(row=2, column=0, sticky='W', padx=5, pady=2) self.txt_value = tk.Entry(self.frame, textvariable=self.value, width=40) self.txt_value.grid(row=2, column=1, sticky="W", padx=4, pady=2) self.lbl_desc = tk.Label(self.frame, text="Description:") self.lbl_desc.grid(row=3, column=0, sticky='W', padx=5, pady=2) self.txt_desc = tk.Entry(self.frame, textvariable=self.description, width=60) self.txt_desc.grid(row=3, column=1, sticky="W", padx=4, pady=2) self.chk_active = tk.Checkbutton(self.frame, text="Active", variable=self.active,onvalue=1, offvalue=0) self.chk_active.grid(row=4, column=1, columnspan =3,sticky='W', pady=2) pass def ok(self): self.is_OK.set(True) self.destroy() def cancel(self): self.is_OK.set(False) self.destroy()
class DispatcherDialog(simpledialog.Dialog): def body(self, master): self.parent = master self.frame = tk.Frame(self.parent) self.resizable(width=False, height=False) self.iconbitmap('tarsier.ico') self.storage = StorageDb('wfm.sqlite') self.settings = Settings() self.helper = Helper() self.init_variables() self.tab_control = ttk.Notebook(self.parent) self.img_tab = {} self.tabs = ["Appointment Booking Detail"] for tab in self.tabs: tabPage = ttk.Frame(self.tab_control) # first page, which would get widgets gridded into it self.img_tab[tab] = PhotoImage(file=str("images/%s.png" % tab.replace(' ',''))) self.tab_control.add(tabPage, text= tab, image =self.img_tab[tab], compound=LEFT) if tab is 'Authentication': #self.create_authTab(tabPage) pass else: self.create_dispatcherTab(tabPage) pass self.init_dispatchers() self.btn_add = tk.Button(self.frame, text='Add', image= self.img_add,compound= LEFT, command=self.add_dispatcher) self.btn_add.grid(row=0, column=0, sticky="E", padx=2, pady=2) self.btn_edit = tk.Button(self.frame, text='Edit', image= self.img_edit,compound= LEFT,command=self.edit_dispatcher) self.btn_edit.grid(row=0, column=2, sticky="E", padx=2, pady=2) self.btn_delete = tk.Button(self.frame, text='Delete', image= self.img_remove,compound= LEFT,command=self.delete_dispatcher) self.btn_delete.grid(row=0, column=3, sticky="E", padx=2, pady=2) self.tab_control.pack(expand=1, fill="both") self.frame.pack(expand=1, fill="both") def init_variables(self): self.value = tk.StringVar() self.description = tk.StringVar() self.active = tk.IntVar() self.selected_id = tk.StringVar() self.img_add = PhotoImage(file="images/list_add.png") self.img_edit = PhotoImage(file="images/list_edit.png") self.img_remove = PhotoImage(file="images/list_remove.png") self.img_warning = PhotoImage(file="images/warning.png") self.img_active = PhotoImage(file="images/yes.png") self.img_notactive = PhotoImage(file="images/no.png") self.DISPATCHERS = 'dispatchers' self.TABLE = 'dispatchers' selected_table = self.settings.GetSetting('selected_table') # get selected id from settings if self.helper.is_notEmpty(selected_table): self.TABLE = selected_table pass def create_dispatcherTab(self, tabPage): self.treeAppointment = ttk.Treeview(tabPage, selectmode='browse') verticalScroll = ttk.Scrollbar(tabPage, orient='vertical', command=self.treeAppointment.yview) verticalScroll.pack(side='right', fill='y') horScroll = ttk.Scrollbar(tabPage, orient='horizontal', command=self.treeAppointment.xview) horScroll.pack(side='bottom', fill='x') self.treeAppointment.configure(yscrollcommand=verticalScroll.set) self.treeAppointment.configure(xscrollcommand=horScroll.set) self.treeAppointment['columns'] = ('value','description', 'active') #self.treeAppointment['show'] = 'headings' self.treeAppointment.heading("#0", text='id', anchor='w') #self.treeAppointment.column("#0", anchor="w", width=20) self.treeAppointment.heading('value', text='Value') self.treeAppointment.column('value', anchor='w') self.treeAppointment.heading('description', text='Description') self.treeAppointment.column('description', anchor='w') self.treeAppointment.heading('active', text='Active') self.treeAppointment.column('active', anchor='center', width=20) self.treeAppointment.pack(expand=1, fill='both') pass def init_dispatchers(self): self.treeAppointment.delete(*self.treeAppointment.get_children()) rows = self.storage.FetchAllRows(self.TABLE) if len(rows) > 0: for row in rows: img = self.img_notactive if row['active'] ==1: img = self.img_active self.treeAppointment.insert('', 'end', image = img, text=row['id'], values= (row['value'],row['description'],row['active'])) else: self.treeAppointment.insert('', 'end', image = self.img_warning, text='', values= ('No data found!','','')) self.treeAppointment.bind('<ButtonRelease-1>', self.itemClicked) self.selected_id.set('') # clear selected id self.settings.SetSettings('selected_id', '') # clear selected id from settings pass def itemClicked(self, event): #print('Item clicked....') curItem = self.treeAppointment.focus() self.selected_id.set(self.treeAppointment.item(curItem, "text")) #print(self.selected_id.get()) self.settings.SetSettings('selected_id', self.selected_id.get()) # print(self.treeAppointment.item(curItem)) # print(self.treeAppointment.item(curItem, "text")) # print(self.treeAppointment.item(curItem, "values")[0]) def add_dispatcher(self): self.settings.SetSettings('action_button', 'ADD') # set an action button that in dialog d = AppointmentInput(self.parent,title='Add '+ self.TABLE.title()) if d.is_OK.get() is True: print ('OK........') if self.helper.is_notEmpty(d.value.get()) and self.helper.is_notEmpty(d.description.get()): content_val = {} content_val['value'] = self.helper.trim_spaces(d.value.get()) content_val['description'] = self.helper.trim_spaces(d.description.get()) content_val['active'] = 1 if self.storage.IsExist(self.TABLE, 'value', d.value.get().strip()): self.storage.UpdateParameterized(self.TABLE, content_val, "value='" + d.value.get().strip() + "'") else: self.storage.InsertParameterized(self.TABLE, content_val) self.init_dispatchers() pass def edit_dispatcher(self): self.settings.SetSettings('action_button', 'EDIT') # set an action button that in dialog if self.helper.is_notEmpty(self.selected_id.get()): d = AppointmentInput(self.parent,title='Edit '+ self.TABLE.title()) if self.helper.is_notEmpty(d.value.get()) and self.helper.is_notEmpty(d.description.get()): content_val = {} content_val['value'] = self.helper.trim_spaces(d.value.get()) content_val['description'] = self.helper.trim_spaces(d.description.get()) content_val['active'] =d.active.get() self.storage.UpdateParameterized(self.TABLE, content_val, "id=" + str(self.selected_id.get())) self.init_dispatchers() pass def delete_dispatcher(self): self.settings.SetSettings('action_button', 'DELETE') # set an action button that in dialog pass def get_selectedId(self): return self.selected_id.get()
class Application(Frame): WFM_TABLE = 'all_data' def __init__(self, parent): Frame.__init__(self, parent) self.init_externalClasses() self.init_globalVariables() self.init_settings() self.init_uiImages() self.parent = parent self.parent.protocol("WM_DELETE_WINDOW", self.onExit) self.parent.bind("<Destroy>", lambda e: self.onExit) self.initMenubar() self.initToolbar() self.initPanedWindow() self.create_StatusBar() #self.LoadTable() self.parent.config(menu=self.menubar) self.pack() self.start_dataThread() if self.is_loading == False: self.treeview.bind('<ButtonRelease-1>', self.itemClicked) #self.grid(sticky = (N,S,W,E)) #self.parent.grid_rowconfigure(0, weight = 1) #self.parent.grid_columnconfigure(0, weight = 1) def start_dataThread(self): try: self.thread = Thread(target=self.load_dataTable, name=str(datetime.datetime.now())) self.is_loading = True self.progressbar.pack(side=LEFT) # change the cursor self.parent.config(cursor="wait") # force Tk to update self.parent.update() # start the thread and progress bar self.thread.start() self.progressbar.start() # check in 50 milliseconds if the thread has finished self.parent.after(50, self.loading_completed) except: pass def init_externalClasses(self): self.storage = StorageDb('wfm.sqlite') self._helper = Helper() self.settings = Settings() #self.component = Components() def init_settings(self): self.kill_ie.set(self.settings.GetSetting('kill_ie')) self.is_visible.set(self.settings.GetSetting('is_visible')) self.parser.set(self.settings.GetSetting('parser')) self.is_send.set(self.settings.GetSetting('send')) self.is_append.set(self.settings.GetSetting('append')) self.folder_location.set(self.settings.GetSetting('exportto')) self.multi_attachments.set(self.settings.GetSetting('multi_attach')) self.is_subfolder.set(self.settings.GetSetting('subfolder')) self.is_subject.set(self.settings.GetSetting('is_subject')) self.is_filename.set(self.settings.GetSetting('is_filename')) self.username.set(self.settings.GetSetting('username')) self.password.set(self.settings.GetSetting('password')) self.url_login.set(self.settings.GetSetting('url_login')) self.url_main.set(self.settings.GetSetting('url_main')) self.default_subject.set(self.settings.GetSetting('default_subject')) self.default_filename.set(self.settings.GetSetting('default_filename')) self.overwite_existing.set( self.settings.GetSetting('overwite_existing')) self.auto_export.set(self.settings.GetSetting('auto_export')) self.workspace_name.set(self.settings.GetSetting('workspace_name')) self.wfm_table.set(self.settings.GetSetting('wfm_table')) self.date_from.set( self.settings.GetSetting('selected_dateFrom').strip()) self.date_to.set(self.settings.GetSetting('selected_dateTo').strip()) self.set_WFMTable(self.wfm_table.get() ) # set wfm table to all variable handle with it #self.set_WFMTable(TABLE_ALLDATA) # set wfm table to all variable handle with it self.date_filter = [] rows = self.storage.GetResults( 'select distinct(CabinetNo) from %s order by CabinetNo asc' % (self.wfm_table.get())) if len(rows) > 0: for r in rows: self.date_filter.append(r['CabinetNo']) def init_globalVariables(self): self.images_tools = {} self.images_menu = {} self.images_navs = {} self.filename = StringVar() self.wfm_table = StringVar() self.image_folder = StringVar() self.search_keyword = StringVar() self.lbl_status = StringVar() self.lbl_wfmTable = StringVar() self.filter = StringVar() self.count_page = StringVar() self.rows_count = StringVar() self.workspace_name = StringVar() self.progress = IntVar() self.progress.set(0) self.progress_maximum = IntVar() self.progress_maximum.set(100) # Settings variables self.is_append = IntVar() self.is_send = IntVar() self.is_subject = IntVar() self.is_subfolder = IntVar() self.is_filename = IntVar() self.multi_attachments = IntVar() self.overwite_existing = IntVar() self.auto_export = IntVar() self.default_subject = StringVar() self.default_filename = StringVar() self.folder_location = StringVar() self.url_login = StringVar() self.url_main = StringVar() self.username = StringVar() self.password = StringVar() self.parser = StringVar() self.date_from = StringVar() self.date_to = StringVar() self.kill_ie = IntVar() self.is_visible = IntVar() self.bullet = "*" # specifies bullet character self.is_loading = False self.openfdialog_filter = 'Open supported files' self.savefdialog_filter = 'Save As created file' self.menus = { "File": [ "New", "Start Crawl", "Refresh", "-", "Save", "Save As...", "-", "Print Preview", "Preferences...", "-", "Exit" ], "Appointment": ["Companies", "Dispatchers", "Status"], "Options": ["Server Connection", "Recipients", "-", "Preferences"], "View": [ "check#Workspace", "check#Toolbar", "check#Statusbar", "-", "check#Large Icons" ], "Help": ["Documentation", "About"] } self.tools = { "File": [ "New", "StartCrawl", "Refresh", "All", "-", "Save", "SaveAs", "PrintPreview", "-" ], "Appointment": ["Companies", "Dispatchers", "Status", "-"], "Options": ["ServerConnection", "Recipients", "Preferences", "-"], "Help": ["Documentation", "About"] } self.navs = ["nav_first", "nav_previous", "nav_next", "nav_last"] self.img_workpaces = PhotoImage(file="images/Workpaces.png") self.img_errors = PhotoImage(file="images/CrawlErrors.png") self.img_find = PhotoImage(file="images/Find.png") self.img_filter = PhotoImage(file="images/filter.png") self.img_filter_advanced = PhotoImage( file="images/filter_advanced.png") self.img_works = PhotoImage(file="images/works.png") self.img_error = PhotoImage(file="images/error.png") self.img_warning = PhotoImage(file="images/warning.png") def init_uiImages(self): self.image_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), "images") self.image_folder = os.path.join(self.image_path, '16') if False: self.image_folder = os.path.join(self.image_path, '32') print(self.image_folder) def new_Crawl(self): pass def doClickEvent(self, index, tag): if self.is_loading == True: # block click event if loading data in process return if tag.find('check#') != -1: print('index: %s label: %s' % (index, tag)) print(self.check[index].get()) else: if tag is 'Open': self.filename = filedialog.askopenfilename( initialdir="/", title=self.openfdialog_filter, filetypes=(("Supported Files (*.py)", "*.py"), ("All Files", "*.*"))) print(self.filename) elif tag.find('Server') != -1: s = ServerDialog(self.parent, title=tag) elif tag is 'SaveAs': self.filename = filedialog.asksaveasfilename( initialdir="/", title=self.savefdialog_filter, filetypes=(("Supported Files (*.py)", "*.py"), ("All Files", "*.*"))) elif tag is 'Recipients': r = RecipientDialog(self.parent, title="Email Addresses ") elif tag is 'New': c = ConfigCrawlDialog(self.parent, title="New Crawl") self.init_settings() self.init_workspaces() elif tag.find('Preferences') != -1: o = OptionsDialog(self.parent, title=tag) elif tag.find('About') != -1: a = AboutDialog(self.parent, title=tag) elif tag.find('Dispatchers') != -1: self.settings.SetSettings( 'selected_table', 'dispatchers') # set an action button that in dialog d = DispatcherDialog(self.parent, title=tag) elif tag.find('Companies') != -1: self.settings.SetSettings( 'selected_table', 'companies') # set an action button that in dialog d = DispatcherDialog(self.parent, title=tag) elif tag.find('Refresh') != -1: self.init_workspaces() self.start_dataThread() elif tag.find('All') != -1: res = messagebox.askquestion( 'Load All Crawled Data', 'This may take a few time.\nAre you sure you want to load all crawled data from WFM?' ) if res == 'yes': self.set_WFMTable(TABLE_ALLDATA) self.start_dataThread() elif tag.find('Status') != -1: self.settings.SetSettings( 'selected_table', 'status') # set an action button that in dialog d = DispatcherDialog(self.parent, title=tag) elif tag.find('Exit') != -1: self.onExit() elif tag.find('StartCrawl') != -1: if self.kill_ie.get() == 1: self.process.kill_process('iexplore.exe') self.crawlDialog = CrawlerDialog(self.parent) # init GUI #self.crawler = Crawler(self.crawlDialog) #init Controller #self.crawler.startCrawler() else: print('doClickEvent index: %s label: %s' % (index, tag)) def initMenubar(self): images_folder_format = "images/16/%s-%s.png" self.menubar = Menu(self.parent) filemenu = Menu(self.menubar, tearoff=0) self.check_menus = [] self.check = {} index = 0 for key, value in self.menus.items(): topMenu = Menu(self.menubar, tearoff=0) for menu in value: if menu is "-": topMenu.add_separator() else: if menu.startswith('check#'): trim_name = menu.replace('check#', '') self.check[index] = StringVar( ) #handles check state dynamically by check menu index topMenu.add_checkbutton( label=trim_name, variable=self.check[index], onvalue=1, offvalue=0, command=(lambda tag=menu, i=index: self. doClickEvent(i, tag))) self.check_menus.append((index, trim_name)) index += 1 else: self.images_menu[menu] = PhotoImage( file=str(images_folder_format % (key, self._helper.non_alphanumeric(menu)))) topMenu.add_command( label=menu, compound=LEFT, image=self.images_menu[menu], command=lambda tag=menu: self.doClickEvent(0, tag)) self.menubar.add_cascade(label=key, menu=topMenu) def initToolbar(self): self.toolbar = Frame(self.parent, bd=1, relief=RAISED) images_folder_format = "images/16/%s-%s.png" if False: images_folder_format = "images/32/%s-%s.png" for key, value in self.tools.items(): for tool in value: self.images_tools[tool] = PhotoImage( file=str(images_folder_format % (key, tool))) self.btn_tool = Button( self.toolbar, image=self.images_tools[tool], text=tool, relief=FLAT, justify=CENTER, command=lambda tag=tool: self.doClickEvent(0, tag)) self.btn_tool.image = self.images_tools[tool] if tool is "-": self.btn_tool.configure(state=NORMAL) self.btn_tool.pack(side=LEFT, padx=2, pady=2) #toolbars.append((tool, btn_tool)) self.toolbar.pack(side=TOP, fill=X) def initPanedWindow(self): #self.paned_window = PanedWindow(bg="green") self.paned_window = PanedWindow() self.paned_window.pack(fill=BOTH, expand=1) self.leftPaneComponents() self.top_paned_window = PanedWindow(self.paned_window, orient=VERTICAL) self.paned_window.add(self.top_paned_window) top_frame = ttk.Frame(self.top_paned_window) nav_buttons = ['<<', '<', '>', '>>'] #for b in nav_buttons: for b in self.navs: self.images_navs[b] = PhotoImage(file=str('images/%s.png' % (b))) btn_nav = Button(top_frame, image=self.images_navs[b], text=b, relief=GROOVE, justify=CENTER, command=lambda tag=b: self.doClickEvent(0, tag)) #btn_nav = Button(top_frame, text= b,relief=GROOVE) btn_nav.pack(side=LEFT, padx=0, pady=0) top_frame.pack(fill=X, padx=200) self.top_paned_window.add(top_frame) cbox_CountPage = ttk.Combobox(top_frame, textvariable=self.count_page, state="readonly", width=4) cbox_CountPage.bind('<Return>') cbox_CountPage['values'] = ('All', '10', '25', '50', '75', '100', '150', '200') cbox_CountPage.current(0) cbox_CountPage.pack(side=LEFT, padx=1, pady=1) lbl_Search = Label(top_frame, text="Search:") lbl_Search.pack(side=LEFT, padx=1, pady=1) txt_Search = Entry(top_frame, text='Keyword', textvariable=self.search_keyword) txt_Search.pack(side=LEFT, padx=1, pady=1) btn_Search = Button( top_frame, text='Find', image=self.img_find, relief=GROOVE, justify=CENTER, command=lambda tag='Find': self.doClickEvent(0, tag)) btn_Search.pack(side=LEFT, padx=1, pady=1) lbl_Filter = Label(top_frame, text="Filter:") lbl_Filter.pack(side=LEFT, padx=1, pady=1) cbox_Filter = ttk.Combobox(top_frame, textvariable=self.filter, state="readonly", width=10) cbox_Filter.bind('<Return>') cbox_Filter['values'] = self.date_filter #cbox_Filter.current(0) cbox_Filter.pack(side=LEFT, padx=1, pady=1) #cbox_Filter.grid(row=1, column=1, columnspan=7, sticky="WE", pady=3) btn_Filter = Button( top_frame, text='Filter', image=self.img_filter, relief=GROOVE, justify=CENTER, command=lambda tag='Filter': self.doClickEvent(0, tag)) btn_Filter.pack(side=LEFT, padx=1, pady=1) btn_FilterAdvanced = Button( top_frame, text='Filter Advanced', image=self.img_filter_advanced, relief=GROOVE, justify=CENTER, command=lambda tag='Filter Advanced': self.doClickEvent(0, tag)) btn_FilterAdvanced.pack(side=LEFT, padx=1, pady=1) label = Label(top_frame, textvariable=self.rows_count, bd=1, relief=FLAT, anchor=W) self.rows_count.set('15 of 40') label.pack(side=LEFT, fill=X) self.initTable() def create_StatusBar(self): self.status_frame = Frame(self.parent, bd=1, relief=GROOVE) self.status_frame.pack(fill=X) label = Label(self.status_frame, textvariable=self.lbl_status, anchor=W) self.lbl_status.set('Ready...') label.pack(side=LEFT) self.progressbar = ttk.Progressbar(self.status_frame, orient='horizontal', variable=self.progress, maximum=self.progress_maximum.get(), length=200) #self.progressbar.pack(expand=True, fill=BOTH, side=TOP) self.progressbar.pack(side=LEFT) #self.progress_load.start(0) lbl_TableDummy = Label(self.status_frame, text='Workspace:', anchor=W) lbl_TableDummy.pack(side=LEFT) lbl_Table = Label(self.status_frame, text='Table:', textvariable=self.lbl_wfmTable, anchor=E, fg='blue') self.lbl_wfmTable.set(self.wfm_table.get()) lbl_Table.pack(side=LEFT) def leftPaneComponents(self): tabControl = ttk.Notebook(self.paned_window, width=200) # Create Tab Control tabPage1 = ttk.Frame(tabControl) # Create a tab tabPage2 = ttk.Frame(tabControl) # Create a tab self.treeWorkspace = ttk.Treeview(tabPage1, selectmode='browse') verticalScroll = ttk.Scrollbar(tabPage1, orient='vertical', command=self.treeWorkspace.yview) verticalScroll.pack(side='right', fill='y') horScroll = ttk.Scrollbar(tabPage1, orient='horizontal', command=self.treeWorkspace.xview) horScroll.pack(side='bottom', fill='x') self.treeWorkspace.configure(yscrollcommand=verticalScroll.set) self.treeWorkspace.configure(xscrollcommand=horScroll.set) self.treeWorkspace['columns'] = ('count', 'details') #self.treeWorkspace['show'] = 'headings' self.treeWorkspace.heading("#0", text='Name', anchor='w') #self.treeWorkspace.column("#0", anchor="w", width=40) self.treeWorkspace.heading('count', text='Count') self.treeWorkspace.column('count', stretch='yes', anchor='center', width=14) self.treeWorkspace.heading('details', text='Details') self.treeWorkspace.column('details', anchor='center', width=20) self.init_workspaces() self.treeWorkspace.pack(expand=1, fill='both') tabPage1.pack(expand=1, fill="both") # Pack to make visible tabPage2.pack(fill="both") # Pack to make visible tabControl.add(tabPage1, text='Workspaces', image=self.img_workpaces, compound=LEFT) # Add the tab tabControl.add(tabPage2, text='Error Links', image=self.img_errors, compound=LEFT) # Add the tab tabControl.pack(expand=1, fill="both") # Pack to make visible self.paned_window.add(tabControl) def init_workspaces(self): self.treeWorkspace.delete(*self.treeWorkspace.get_children()) rows = self.storage.FetchAllRows(WORKSPACES) if len(rows) > 0: for row in rows: self.treeWorkspace.insert('', 'end', image=self.img_works, text=row['name'], values=(row['count'], row['details'])) self.treeWorkspace.bind("<Double-1>", self.onDoubleClickWorkspace) else: self.treeWorkspace.insert('', 'end', image=self.img_error, text='No data found!', values=('', '')) pass def initTable(self): self.treeview = ttk.Treeview(self.top_paned_window) #cols = self.storage.FetchAllColumns(TABLE_ALLDATA) cols = self.storage.FetchAllColumns(self.WFM_TABLE) self.columns = [] if len(cols) > 0: for c in cols: col_name = c[1].strip() if col_name != 'id' and col_name != 'JobActivityList': #print(col_name) self.columns.append(col_name) self.treeview['columns'] = self.columns self.treeview.heading("#0", text='ID') self.treeview.column("#0", anchor='w', width=50) for c in self.columns: #self.treeview.heading(c, text=c.title()) self.treeview.heading(c, text=c) self.treeview.column(c, anchor='w') ysb = Scrollbar(orient=VERTICAL, command=self.treeview.yview) xsb = Scrollbar(orient=HORIZONTAL, command=self.treeview.xview) self.treeview['yscroll'] = ysb.set self.treeview['xscroll'] = xsb.set # add tree and scrollbars to frame self.treeview.grid(in_=self.top_paned_window, row=0, column=0, sticky=(N, S, W, E), pady=50) ysb.grid(in_=self.top_paned_window, row=0, column=1, sticky="NS") xsb.grid(in_=self.top_paned_window, row=3, column=0, sticky="EW") self.top_paned_window.add(self.treeview) self.top_paned_window.rowconfigure(0, weight=1) self.top_paned_window.columnconfigure(0, weight=1) def load_dataTable(self): self.treeview.delete(*self.treeview.get_children()) #rows = self.storage.FetchAllRows(TABLE_ALLDATA) rows = self.storage.FetchAllRows(self.WFM_TABLE) self.progress_maximum.set( len(rows)) # set maximum value of progressbar self.progressbar['maximum'] = len(rows) i = 1 if len(rows) > 0: for row in rows: values = [] id = row['id'] for col in self.columns: values.append(row[col]) #time.sleep(0.1) self.progress.set(i) self.lbl_status.set('Loading ...%s of %s ' % (i, self.progress_maximum.get())) self.treeview.insert("", "end", text=id, values=values) #del values[:] #del values i += 1 #self.treeview.bind('<ButtonRelease-1>', self.itemClicked) def loading_completed(self): if self.thread.is_alive(): # if the thread is still alive check again in 50 milliseconds self.parent.after(50, self.loading_completed) else: # if thread has finished stop and reset everything self.progressbar.stop() self.progressbar.pack_forget() #self.browse_button.config(state="enabled") self.parent.config(cursor="") self.parent.update() self.is_loading = False self.lbl_status.set('Ready...') self.treeview.bind('<ButtonRelease-1>', self.onItemClicked) self.treeview.bind("<Double-1>", self.onDoubleClick) def onItemClicked(self, event): if self.is_loading == True: # do nothing if data loading is still in progress return try: curItem = self.treeview.focus() print(self.treeview.item(curItem)) print(self.treeview.item(curItem, "text")) print(self.treeview.item(curItem, "values")[0]) except: pass def onDoubleClick(self, event): if self.is_loading == True: # do nothing if data loading is still in progress return item = self.treeview.selection()[0] print("you clicked on", self.treeview.item(item, "text")) def onDoubleClickWorkspace(self, event): if self.is_loading == True: # do nothing if data loading is still in progress return item = self.treeWorkspace.selection()[0] ws = self._helper.non_alphanumeric( self.treeWorkspace.item(item, "text")).lower() if self._helper.is_notEmpty(ws): print("you clicked on", ws) self.set_WFMTable(ws) self.start_dataThread( ) # start loading all data from selected workspace def set_WFMTable(self, table): self.wfm_table.set(table) self.WFM_TABLE = table self.settings.SetSettings('wfm_table', table) self.lbl_wfmTable.set(table) def onExit(self): try: if messagebox.askokcancel("Quit", "Do you want to quit?"): self.parent.destroy() except: pass
class ServerDialog(simpledialog.Dialog): def body(self, master): frame = tk.Frame(master, width=500) self.resizable(width=False, height=False) self.iconbitmap('tarsier.ico') self.settings = Settings() self.arp = ArpTable() self.bullet = "*" # specifies bullet character self.hostname = tk.StringVar() self.username = tk.StringVar() self.password = tk.StringVar() self.database = tk.StringVar() self.hostname.set(self.settings.GetSetting('server_hostname')) self.username.set(self.settings.GetSetting('server_username')) self.password.set(self.settings.GetSetting('server_password')) self.database.set(self.settings.GetSetting('server_database')) self.frame_server = tk.LabelFrame(frame, text="Server Authentication") self.frame_server.grid(row=0, column=0, sticky='W') self.frame_server.grid(padx=5, pady=5) self.lbl_Spacer1 = tk.Label(self.frame_server, text="", width=4) self.lbl_Spacer1.grid(row=0, column=4, columnspan=5, sticky='W', padx=5, pady=2) self.lbl_hostname = tk.Label(self.frame_server, text=" Hostname:") self.lbl_hostname.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.cbox_hostname = ttk.Combobox(self.frame_server, textvariable=self.hostname, state="readonly", width=28) self.cbox_hostname.bind('<Return>') self.cbox_hostname['values'] = self.arp.get_ips('192') self.cbox_hostname.current(0) self.cbox_hostname.grid(row=1, column=1, columnspan=2, sticky="W", pady=2) #self.txt_hostname = tk.Entry(self.frame_server, textvariable=self.hostname, width=28) #self.txt_hostname.grid(row=1, column=1,columnspan=2, sticky="W", pady=2) self.lbl_username = tk.Label(self.frame_server, text=" Username:"******"W", pady=2) self.lbl_password = tk.Label(self.frame_server, text="Password:"******"W", pady=2) self.lbl_database = tk.Label(self.frame_server, text="Database:") self.lbl_database.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.txt_database = tk.Entry(self.frame_server, textvariable=self.database, width=31) self.txt_database.grid(row=4, column=1, columnspan=2, sticky="W", pady=2) self.lbl_Spacer1 = tk.Label(self.frame_server, text="", width=4) self.lbl_Spacer1.grid(row=5, column=4, columnspan=5, sticky='W', padx=5, pady=2) frame.pack(expand=1, fill='both') def ok(self): self.settings.SetSettings('server_hostname', self.hostname.get()) self.settings.SetSettings('server_username', self.username.get()) self.settings.SetSettings('server_password', self.password.get()) self.settings.SetSettings('server_database', self.database.get()) self.destroy()
class OptionsDialog(simpledialog.Dialog): def body(self, master): self.parent = master self.frame = tk.Frame(self.parent, width=400) self.resizable(width=False, height=False) self.iconbitmap('tarsier.ico') self.helper = Helper() self.settings = Settings() self.init_variables() self.tab_control = ttk.Notebook(self.parent) self.img_tab = {} self.tabs = ["General", "Export", "WFM", "Parser"] for tab in self.tabs: tabPage = ttk.Frame( self.tab_control ) # first page, which would get widgets gridded into it self.img_tab[tab] = PhotoImage(file=str("images/%s.png" % tab)) self.tab_control.add(tabPage, text=tab, image=self.img_tab[tab], compound=LEFT) if tab is 'General': self.create_generalTab(tabPage) if tab is 'Export': self.create_exportTab(tabPage) if tab is 'WFM': self.create_sitesTab(tabPage) if tab is 'Parser': self.create_parserTab(tabPage) self.tab_control.pack(expand=1, fill="both") # Pack to make visible self.frame.pack(expand=1, fill="both") self.strg = StorageDb('wfm.sqlite') fields = {} fields['id'] = 'INTEGER PRIMARY KEY AUTOINCREMENT' fields['email'] = 'VARCHAR (50)' fields['active'] = 'INTEGER' self.strg.CreateTable('recipients', fields) def init_variables(self): self.is_append = tk.IntVar() self.is_send = tk.IntVar() self.is_subject = tk.IntVar() self.default_subject = tk.StringVar() self.multi_attachments = tk.IntVar() self.is_subfolder = tk.IntVar() self.is_filename = tk.IntVar() self.is_visible = tk.IntVar() self.kill_ie = tk.IntVar() self.default_filename = tk.StringVar() self.folder_location = tk.StringVar() self.overwite_existing = tk.IntVar() self.auto_export = tk.IntVar() self.url_login = tk.StringVar() self.url_main = tk.StringVar() self.username = tk.StringVar() self.password = tk.StringVar() self.parser = tk.StringVar() self.bullet = "*" # specifies bullet character self.kill_ie.set(self.settings.GetSetting('kill_ie')) self.parser.set(self.settings.GetSetting('parser')) self.is_send.set(self.settings.GetSetting('send')) self.is_append.set(self.settings.GetSetting('append')) self.folder_location.set(self.settings.GetSetting('exportto')) self.multi_attachments.set(self.settings.GetSetting('multi_attach')) self.is_subfolder.set(self.settings.GetSetting('subfolder')) self.is_subject.set(self.settings.GetSetting('is_subject')) self.is_filename.set(self.settings.GetSetting('is_filename')) self.username.set(self.settings.GetSetting('username')) self.password.set(self.settings.GetSetting('password')) self.url_login.set(self.settings.GetSetting('url_login')) self.url_main.set(self.settings.GetSetting('url_main')) self.default_subject.set(self.settings.GetSetting('default_subject')) self.default_filename.set(self.settings.GetSetting('default_filename')) self.overwite_existing.set( self.settings.GetSetting('overwite_existing')) self.auto_export.set(self.settings.GetSetting('auto_export')) self.default_urlLogin = "******" self.default_urlMain = "https://wfm.coach.com/wfm/dailyview_entry?matrixAction=APPTBOOKINGDTL_ENTRY" def create_generalTab(self, parentTab): self.lbl_Gen = tk.Label(parentTab, text="Email configuration", font='Tahoma 8 bold', fg='gray') self.lbl_Gen.grid(row=0, column=0, columnspan=2, sticky='W', padx=1, pady=4) self.lbl_NoteGen = tk.Label(parentTab, text="Options in sending crawled data.", fg='darkgray') self.lbl_NoteGen.grid(row=1, column=0, columnspan=2, sticky='W', padx=5, pady=1) self.chk_isAppend = tk.Checkbutton( parentTab, text="Append crawled data per Activity", variable=self.is_append, onvalue=1, offvalue=0) self.chk_isAppend.grid(row=2, column=0, columnspan=3, sticky='W', pady=2) self.chk_isSend = tk.Checkbutton(parentTab, text="Send after crawling", variable=self.is_send, onvalue=1, offvalue=0) self.chk_isSend.grid(row=3, column=0, columnspan=3, sticky='W', pady=2) self.chk_isSubject = tk.Checkbutton(parentTab, text="Default email subject:", variable=self.is_subject, onvalue=1, offvalue=0, command=self.is_subjectChecked) self.chk_isSubject.grid(row=4, column=0, sticky='W', pady=2) self.txt_subject = tk.Entry(parentTab, textvariable=self.default_subject, state="readonly", width=40) self.txt_subject.grid(row=4, column=1, columnspan=3, sticky="WE", pady=2) self.lbl_AttachmentMode = tk.Label(parentTab, text="Email attachment mode", font='Tahoma 8 bold') self.lbl_AttachmentMode.grid(row=5, column=0, columnspan=3, sticky='W', padx=1, pady=6) self.rbtn_single = tk.Radiobutton(parentTab, text="Attach exported single file", variable=self.multi_attachments, value=1, command=self.is_multiAttach) self.rbtn_single.grid(row=6, column=0, columnspan=3, sticky='W', padx=5, pady=0) self.rbtn_multi = tk.Radiobutton( parentTab, text="Attach all exported file(s) inside folder", variable=self.multi_attachments, value=2, command=self.is_multiAttach) self.rbtn_multi.grid(row=7, column=0, columnspan=3, sticky='W', padx=5, pady=0) def create_exportTab(self, parentTab): self.lbl_Exp = tk.Label(parentTab, text="Export configuration", font='Tahoma 8 bold', fg='gray') self.lbl_Exp.grid(row=0, column=0, columnspan=2, sticky='W', padx=1, pady=4) self.lbl_NoteExp = tk.Label(parentTab, text="Options in exporting crawled data.", fg='darkgray') self.lbl_NoteExp.grid(row=1, column=0, columnspan=2, sticky='W', padx=5, pady=1) self.chk_isDateSubfolder = tk.Checkbutton( parentTab, text="Create Date subfolder", variable=self.is_subfolder, onvalue=1, offvalue=0, command=self.is_filenameChecked) self.chk_isDateSubfolder.grid(row=2, column=0, columnspan=4, sticky='W', pady=2) self.chk_isFilename = tk.Checkbutton(parentTab, text="Filename", variable=self.is_filename, onvalue=1, offvalue=0, command=self.is_filenameChecked) self.chk_isFilename.grid(row=3, column=0, sticky='W', pady=2) self.txt_filename = tk.Entry(parentTab, width=40, textvariable=self.default_filename, state="readonly") self.txt_filename.grid(row=3, column=1, columnspan=4, sticky="WE", pady=2) self.lbl_folder = tk.Label(parentTab, text="Export To:") self.lbl_folder.grid(row=4, column=0, sticky='W', padx=5, pady=2) self.txt_folder = tk.Entry(parentTab, width=40, textvariable=self.folder_location, state="readonly") self.txt_folder.grid(row=4, column=1, columnspan=4, sticky="WE", pady=2) self.img_browse = PhotoImage(file="images/browse.png") self.btn_browseFolder = tk.Button(parentTab, text="Browse", image=self.img_browse, compound=LEFT, command=self.getFolder) self.btn_browseFolder.grid(row=4, column=5, sticky='W', padx=5, pady=2) self.chk_overwiteExisting = tk.Checkbutton( parentTab, text="Overwite existing file if exist", variable=self.overwite_existing, onvalue=1, offvalue=0) self.chk_overwiteExisting.grid(row=5, column=0, columnspan=4, sticky='W', pady=2) self.chk_autoExport = tk.Checkbutton( parentTab, text="Automatic export crawled data", variable=self.auto_export, onvalue=1, offvalue=0) self.chk_autoExport.grid(row=6, column=0, columnspan=4, sticky='W', pady=2) def create_sitesTab(self, parentTab): self.lbl_WFM = tk.Label(parentTab, text="WFM Authentication", font='Tahoma 8 bold', fg='gray') self.lbl_WFM.grid(row=0, column=0, columnspan=2, sticky='W', padx=1, pady=4) self.lbl_Note = tk.Label(parentTab, text="Credentials use to login WFM site.", fg='darkgray') self.lbl_Note.grid(row=1, column=0, columnspan=2, sticky='W', padx=5, pady=1) self.lbl_username = tk.Label(parentTab, text=" Username:"******"WE", pady=2) self.lbl_password = tk.Label(parentTab, text="Password:"******"WE", pady=2) self.lbl_Note1 = tk.Label( parentTab, text= "A predefined urls use in crawling, enter your url to modified.", fg='green') self.lbl_Note1.grid(row=4, column=0, columnspan=2, sticky='W', padx=5, pady=2) self.lbl_Login = tk.Label(parentTab, text="Login URL:") self.lbl_Login.grid(row=5, column=0, sticky='W', padx=5, pady=2) #self.txt_urlLogin = tk.Entry(parentTab, width=50, justify=LEFT, textvariable=self.url_login) #self.txt_urlLogin.grid(row=5, column=1, columnspan=4, sticky="WE", pady=2) self.txt_urlLogin = tk.Text(parentTab, height=3, width=38) self.txt_urlLogin.grid(row=5, column=1, columnspan=4, sticky="WE", pady=2) self.txt_urlLogin.insert(tk.END, self.url_login.get()) self.lbl_Main = tk.Label(parentTab, text="Main URL:") self.lbl_Main.grid(row=6, column=0, sticky='W', padx=5, pady=2) #self.txt_urlMain = tk.Entry(parentTab, width=50, justify=LEFT, textvariable=self.url_main) #self.txt_urlMain.grid(row=3, column=1, columnspan=4, sticky="WE", pady=2) self.txt_urlMain = tk.Text(parentTab, height=3, width=38) self.txt_urlMain.grid(row=6, column=1, columnspan=4, sticky="WE", pady=2) self.txt_urlMain.insert(tk.END, self.url_main.get()) pass def create_parserTab(self, parentTab): self.lbl_Spacer2 = tk.Label( parentTab, fg="gray", wraplength=350, justify=LEFT, text= "For development purpose only.\nEnter parser (html.parser or lxml) or leave blank if you don't want to set parser." ) self.lbl_Spacer2.grid(row=0, column=0, columnspan=4, sticky='W', padx=1, pady=4) self.lbl_parser = tk.Label(parentTab, text="Parser:") self.lbl_parser.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.txt_parser = tk.Entry(parentTab, textvariable=self.parser, width=23) self.txt_parser.grid(row=1, column=1, columnspan=4, sticky="WE", pady=2) self.lbl_Ex = tk.Label(parentTab, text="Example ", fg='gray', justify=tk.LEFT) self.lbl_Ex.grid(row=2, column=0, sticky='E', padx=1, pady=1) self.lbl_Spacer1 = tk.Label(parentTab, text="html.parser\nlxml", fg='blue', justify=tk.LEFT) self.lbl_Spacer1.grid(row=2, column=1, columnspan=4, sticky='W', padx=1, pady=1) self.chk_isKillProcess = tk.Checkbutton( parentTab, text="Kill Internet Explorer process.", variable=self.kill_ie, onvalue=1, offvalue=0) self.chk_isKillProcess.grid(row=3, column=0, columnspan=4, sticky='W', pady=2) self.chk_isVisible = tk.Checkbutton( parentTab, text="Internet Explorer visiblity during crawling.", variable=self.is_visible, onvalue=1, offvalue=0) self.chk_isVisible.grid(row=4, column=0, columnspan=4, sticky='W', pady=2) def is_multiAttach(self): self.settings.SetSettings('multi_attach', self.multi_attachments.get()) def is_subjectChecked(self): checked = self.is_subject.get() if checked and checked == 1: self.txt_subject['state'] = "normal" else: self.default_subject.set('') self.txt_subject['state'] = "readonly" self.settings.SetSettings('is_subject', checked) self.settings.SetSettings('default_subject', self.default_subject.get()) def getFolder(self): folder = filedialog.askdirectory( parent=self, initialdir="/", title= 'Please select a directory where you want to export Crawled Data') if self.helper.is_notEmpty(folder): self.helper.resolveDirectory(folder) self.settings.SetSettings('exportto', folder) self.folder_location.set(folder) def is_filenameChecked(self): checked = self.is_filename.get() if checked and checked == 1: self.txt_filename['state'] = "normal" else: self.default_filename.set('') self.txt_filename['state'] = "readonly" self.settings.SetSettings('is_filename', checked) self.settings.SetSettings('default_filename', self.default_filename.get()) def ok(self): ul = self.txt_urlLogin.get("1.0", "end-1c") um = self.txt_urlMain.get("1.0", "end-1c") if ul.strip() is None: ul = self.default_urlLogin if um.strip() is None: um = self.default_urlMain self.settings.SetSettings('send', self.is_send.get()) self.settings.SetSettings('append', self.is_append.get()) self.settings.SetSettings('subfolder', self.is_subfolder.get()) self.settings.SetSettings('exportto', self.folder_location.get()) self.settings.SetSettings('multi_attach', self.multi_attachments.get()) self.settings.SetSettings('username', self.username.get()) self.settings.SetSettings('password', self.password.get()) self.settings.SetSettings('url_login', ul) self.settings.SetSettings('url_main', um) self.settings.SetSettings('default_subject', self.default_subject.get()) self.settings.SetSettings('overwite_existing', self.overwite_existing.get()) self.settings.SetSettings('auto_export', self.auto_export.get()) self.settings.SetSettings('parser', self.parser.get()) self.settings.SetSettings('kill_ie', self.kill_ie.get()) self.settings.SetSettings('default_subject', self.default_subject.get()) self.settings.SetSettings('default_filename', self.default_filename.get()) self.settings.SetSettings('is_subject', self.is_subject.get()) self.settings.SetSettings('is_filename', self.is_filename.get()) self.settings.SetSettings('is_visible', self.is_visible.get()) self.destroy()
class ConfigCrawlDialog(simpledialog.Dialog): def body(self, master): self.parent = master self.frame = tk.Frame(self.parent, width=500) self.resizable(width=False, height=False) self.iconbitmap('tarsier.ico') self.storage = StorageDb('wfm.sqlite') self.appt_helper = AppointmentHelper() self.settings = Settings() self.helper = Helper() self.init_variables() self.tab_control = ttk.Notebook(self.parent) self.img_tab = {} self.tabs = ["Appointment Booking Detail", "Authentication"] for tab in self.tabs: tabPage = ttk.Frame( self.tab_control ) # first page, which would get widgets gridded into it self.img_tab[tab] = PhotoImage(file=str("images/%s.png" % tab.replace(' ', ''))) self.tab_control.add(tabPage, text=tab, image=self.img_tab[tab], compound=LEFT) if tab is 'Authentication': self.create_authTab(tabPage) else: self.create_filterTab(tabPage) self.tab_control.pack(expand=1, fill="both") # Pack to make visible self.frame.pack(expand=1, fill="both", padx=8, pady=5) def init_variables(self): self.kill_ie = tk.IntVar() self.is_visible = tk.IntVar() self.company_id = tk.StringVar() self.dispatcher_id = tk.StringVar() self.status = tk.StringVar() self.appt_company_id = tk.StringVar() self.appt_dispatcher_id = tk.StringVar() self.appt_status = tk.StringVar() self.selected_dateFrom = tk.StringVar() self.selected_dateTo = tk.StringVar() self.username = tk.StringVar() self.password = tk.StringVar() self.bullet = "*" # specifies bullet character self.is_visible.set(self.settings.GetSetting('is_visible')) self.kill_ie.set(self.settings.GetSetting('kill_ie')) self.company_id.set(self.settings.GetSetting('company_id')) self.dispatcher_id.set(self.settings.GetSetting('dispatcher_id')) self.status.set(self.settings.GetSetting('status')) self.username.set(self.settings.GetSetting('username')) self.password.set(self.settings.GetSetting('password')) self.year = time.localtime()[0] self.month = time.localtime()[1] self.day = time.localtime()[2] self.strdate = (str(self.month).zfill(2) + "/" + str(self.day).zfill(2) + "/" + str(self.year)) self.selected_dateFrom.set(self.strdate) self.selected_dateTo.set(self.strdate) date_from = self.settings.GetSetting('selected_dateFrom').strip() date_to = self.settings.GetSetting('selected_dateTo').strip() if date_from and date_from.strip(): self.selected_dateFrom.set(date_from) if date_to and date_to.strip(): self.selected_dateTo.set(date_to) self.companies_id = [] self.dispachers_id = [] self.appt_activity = [] self.appt_statuses = [] rows_dis = self.storage.GetResults( 'select * from dispatchers where active =1') if len(rows_dis) > 0: for row in rows_dis: self.dispachers_id.append(row['value'] + ' - ' + row['description']) rows_comps = self.storage.GetResults( 'select * from companies where active =1') if len(rows_comps) > 0: for row in rows_comps: self.companies_id.append(row['value'] + ' - ' + row['description']) rows_stats = self.storage.GetResults( 'select * from status where active =1') if len(rows_stats) > 0: for row in rows_stats: self.appt_statuses.append(row['value'] + ' - ' + row['description']) rows_acts = self.storage.GetResults( 'select * from activities where active =1') if len(rows_acts) > 0: for row in rows_acts: self.appt_activity.append(row['value']) self.img_dateTo = PhotoImage(file="images/date_to.png") self.img_dateFrom = PhotoImage(file="images/date_from.png") def create_filterTab(self, tabPage): self.lbl_AttachmentMode = tk.Label(tabPage, text="Appointment Search Options", font='Tahoma 8 bold', fg='gray') self.lbl_AttachmentMode.grid(row=0, column=0, columnspan=5, sticky='W', padx=1, pady=6) self.lbl_Note = tk.Label( tabPage, text="Please provide your desired appointment search filter", fg='green') self.lbl_Note.grid(row=1, column=0, columnspan=5, sticky='W', padx=5, pady=2) self.lbl_companyId = tk.Label(tabPage, text="Company ID:") self.lbl_companyId.grid(row=2, column=0, sticky='W', padx=5, pady=2) self.cbox_companyId = ttk.Combobox(tabPage, textvariable=self.company_id, state="readonly", width=50) self.cbox_companyId.bind('<Return>') self.cbox_companyId['values'] = self.companies_id #self.cbox_companyId.current(0) # select index 0 by default self.cbox_companyId.grid(row=2, column=1, columnspan=5, sticky="W", pady=3) self.lbl_dispatcherId = tk.Label(tabPage, text="Dispatcher ID:") self.lbl_dispatcherId.grid(row=3, column=0, sticky='W', padx=5, pady=2) self.cbox_dispatcherId = ttk.Combobox(tabPage, textvariable=self.dispatcher_id, state="readonly", width=60) self.cbox_dispatcherId.bind('<Return>') self.cbox_dispatcherId['values'] = self.dispachers_id #self.cbox_dispatcherId.current(0) # select index 0 by default self.cbox_dispatcherId.grid(row=3, column=1, columnspan=5, sticky="W", pady=3) self.lbl_apptStatus = tk.Label(tabPage, text="Appt Status:") self.lbl_apptStatus.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.cbox_apptStatus = ttk.Combobox(tabPage, textvariable=self.status, state="readonly") self.cbox_apptStatus.bind('<<ComboboxStatus>>') self.cbox_apptStatus['values'] = self.appt_statuses #self.cbox_apptStatus.current(0) # select index 0 by default self.cbox_apptStatus.grid(row=4, column=1, columnspan=5, sticky="WE", pady=2) self.lbl_Spacer1 = tk.Label(tabPage, text="") self.lbl_Spacer1.grid(row=5, column=0, columnspan=5, sticky='E', padx=5, pady=4) self.lbl_dateFrom = tk.Label(tabPage, text="Date From:") self.lbl_dateFrom.grid(row=6, column=0, sticky='E', padx=5, pady=2) self.txt_dateFrom = tk.Entry(tabPage, textvariable=self.selected_dateFrom, state="readonly", width=14) self.txt_dateFrom.grid(row=6, column=1, sticky="WE", pady=2) self.btn_dateFrom = tk.Button( tabPage, image=self.img_dateFrom, text="...", command=lambda: self.getCalendarDate("from")) self.btn_dateFrom.grid(row=6, column=2, sticky='W', padx=5, pady=2) self.lbl_dateTo = tk.Label(tabPage, text="Date To:") self.lbl_dateTo.grid(row=6, column=3, sticky='E', padx=5, pady=2) self.txt_dateTo = tk.Entry(tabPage, textvariable=self.selected_dateTo, state="readonly", width=14) self.txt_dateTo.grid(row=6, column=4, sticky="WE", pady=2) self.btn_dateTo = tk.Button(tabPage, image=self.img_dateTo, text="...", command=lambda: self.getCalendarDate("to")) self.btn_dateTo.grid(row=6, column=5, sticky='W', padx=5, pady=2) def create_authTab(self, tabPage): self.lbl_WFM = tk.Label(tabPage, text="WFM Authentication", font='Tahoma 8 bold', fg='gray') self.lbl_WFM.grid(row=0, column=0, columnspan=2, sticky='W', padx=1, pady=4) self.lbl_Note = tk.Label(tabPage, text="Credentials use to login WFM site.", fg='darkgray') self.lbl_Note.grid(row=1, column=0, columnspan=2, sticky='W', padx=5, pady=1) self.lbl_username = tk.Label(tabPage, text=" Username:"******"WE", pady=2) self.lbl_password = tk.Label(tabPage, text="Password:"******"WE", pady=2) self.lbl_Other = tk.Label(tabPage, text="Other crawler options", font='Tahoma 8 bold', fg='gray') self.lbl_Other.grid(row=4, column=0, columnspan=2, sticky='W', padx=1, pady=4) self.lbl_OtherNote = tk.Label( tabPage, text="Please provide some of ccrawling options.", fg='darkgray') self.lbl_OtherNote.grid(row=5, column=0, columnspan=2, sticky='W', padx=5, pady=1) self.chk_isKillProcess = tk.Checkbutton( tabPage, text="Kill opened Internet Explorer process.", variable=self.kill_ie, onvalue=1, offvalue=0) self.chk_isKillProcess.grid(row=6, column=0, columnspan=4, sticky='W', pady=2) self.chk_isVisible = tk.Checkbutton( tabPage, text="Internet Explorer visiblity during crawling.", variable=self.is_visible, onvalue=1, offvalue=0) self.chk_isVisible.grid(row=7, column=0, columnspan=4, sticky='W', pady=2) def getCalendarDate(self, date_state): datee = datetime.datetime.strptime(self.selected_dateTo.get(), "%m/%d/%Y") if (date_state == "from"): datee = datetime.datetime.strptime(self.selected_dateTo.get(), "%m/%d/%Y") #cd = CalendarDialog(self.parent,title="Calendar", year= str(datee.year), month= str(datee.month)) cd = CalendarDialog(self.parent, title="Calendar") result = cd.result if (result and result != ''): if (date_state == "from"): self.selected_dateFrom.set(result.strftime("%m/%d/%Y")) else: self.selected_dateTo.set(result.strftime("%m/%d/%Y")) def getCurrentDate(self, ): return time.strftime("%Y-%m-%d") def getCurrentTime(self, ): return time.strftime("%I:%M:%S %p") def ok(self): self.settings.SetSettings('username', self.username.get()) self.settings.SetSettings('password', self.password.get()) self.settings.SetSettings('selected_dateFrom', self.selected_dateFrom.get()) self.settings.SetSettings('selected_dateTo', self.selected_dateTo.get()) self.settings.SetSettings('is_visible', self.is_visible.get()) self.settings.SetSettings('kill_ie', self.kill_ie.get()) self.appt_company_id = self.appt_helper.get_value( self.company_id.get()) self.appt_dispatcher_id = self.appt_helper.get_value( self.dispatcher_id.get()) self.appt_status = self.appt_helper.get_value( self.cbox_apptStatus.get()).replace('#', 'Any') if self.helper.is_notEmpty( self.appt_company_id) and self.helper.is_notEmpty( self.appt_dispatcher_id) and self.helper.is_notEmpty( self.appt_status): self.settings.SetSettings('appt_company_id', self.appt_company_id) self.settings.SetSettings('appt_dispatcher_id', self.appt_dispatcher_id) self.settings.SetSettings('appt_status', self.appt_status) self.settings.SetSettings('company_id', self.company_id.get()) self.settings.SetSettings('dispatcher_id', self.dispatcher_id.get()) self.settings.SetSettings('status', self.status.get()) ws = [] ws.append(self.appt_company_id) ws.append(self.appt_dispatcher_id) ws.append(self.appt_status) ws.append((self.selected_dateFrom.get() + "-" + self.selected_dateTo.get()).replace("/", ".")) work_name = "wfm-" + " ".join(ws) code = self.helper.non_alphanumeric(work_name).lower() content_val = {} content_val['name'] = work_name content_val['count'] = '0' content_val['details'] = self.appt_helper.get_currentDate() content_val['date_from'] = self.selected_dateFrom.get() content_val['date_to'] = self.selected_dateTo.get() content_val['company_id'] = self.appt_company_id content_val['dispatcher_id'] = self.appt_dispatcher_id content_val['status'] = self.appt_status content_val['code'] = code self.add_workspace(content_val, code) # add new workspace self.storage.CreateWFMTable(code) # create table for WFM self.storage.CreateLinksTable( code + '_links') # create table for WFM links self.settings.SetSettings('workspace_name', work_name) self.settings.SetSettings('wfm_table', code) self.destroy() def add_workspace(self, content_val, code): if self.storage.IsExist(WORKSPACES, 'code', code): self.storage.UpdateParameterized(WORKSPACES, content_val, "code='" + code + "'") else: self.storage.InsertParameterized(WORKSPACES, content_val)