-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAppGUI.pyw
More file actions
448 lines (386 loc) · 16.9 KB
/
AppGUI.pyw
File metadata and controls
448 lines (386 loc) · 16.9 KB
1
import wximport osimport shutilimport threadingimport timeimport cPickle as Picklefrom twisted.internet import wxreactortry: wxreactor.install()except: passfrom twisted.python import logfrom twisted.internet import reactorimport auditimport MessagePanelimport gmessagePanelimport letterspanelimport gletterspanelfrom functions import GroupClassFunctions as groupffrom serverManager import ServerAccessimport serverinterface as scpfrom inbox import InboxPanelimport groupPanel as dgimport adminPanel as apimport companyinfoimport userupdateimport panelsfrom wx.lib.embeddedimage import PyEmbeddedImageglobal GridBGGridBG = PyEmbeddedImage( "iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAYAAAAcaxDBAAAABHNCSVQICAgIfAhkiAAAAX9J" "REFUeJzt3FtqgjEUAOGjBi+tgpt3C751b4XaakXRDYRfiJOQwHyPDVgZCByStLPD8esRwqSI" "iP1um138/jnF52adXfs9XybX1qtldu3yfy3+zBHW5tmfqphBYQaFGRRmUNjMsYmVIiLSYpFd" "vN3vXY1Gpd9zao0eGd3yMIPCDAozKMygMMcmWIqIKiNOjROs0rXtxya7dvo745/plocZFGZQ" "mEFhBoU5NsGqjU2jrNEnWG55mEFhBoUZFGZQmGMTrNrYVONCbYT3Um55mEFhBoUZFGZQmGMT" "LEVElUusUS7+fNvUOYPCDAozKMygMMcmWHeXdCOcKE19T7c8zKAwg8IMCjMozLEJ9nJs6ulp" "d08Xhp42NWJQmEFhBoUZFObYBBvqbVPrv6QrGRnd8jCDwgwKMyjMoDDHJthQ/7dphDHNLQ8z" "KMygMIPCDApzbIK9ddrU8hSnt4s/x6ZGDAozKMygMIPCHJtg3b1tan2CRf8+tzzMoDCDwgwK" "MyjsCUFtsOQdiq21AAAAAElFTkSuQmCC")SHOW_BACKGROUND = 1#----------------------------------------------------------------------ID_New = wx.NewId()ID_Exit = wx.NewId()#----------------------------------------------------------------------class MainFrame(wx.MDIParentFrame,MessagePanel.Messages): def __init__(self, system_details, app_details): try: self.title = "SMS Lite - " + app_details["Name"] except KeyError: self.title = "SMS Lite" except IOError: self.title = "SMS Lite" except TypeError: self.title = "SMS Lite" self.SystemDetails = system_details self.user, self.password = system_details[0], system_details[1] wx.MDIParentFrame.__init__(self, None, -1, self.title, size=(900, 600)) self.winCount = 0 self.font2 = wx.Font(10, wx.DECORATIVE, wx.NORMAL, wx.NORMAL) self.font = wx.Font(10, wx.DECORATIVE, wx.NORMAL, wx.NORMAL) menuBar = wx.MenuBar() menu1 = wx.Menu() exitMenuItem = wx.MenuItem(menu1, wx.ID_ANY, "Exit", "Exit the application") exitMenuItem.SetFont(self.font) updateMenuItem = wx.MenuItem(menu1, 0002, "Change User Details", "Change password and username") menu1.AppendItem(updateMenuItem) if self.user == "admin" or self.user == "root": restartMenuItem = wx.MenuItem(menu1, 0001, "Refresh Application", "Exit the Server") menu1.AppendItem(restartMenuItem) menuBar.Append(menu1, "&File") menu1.AppendItem(exitMenuItem) self._initialize() # 2nd menu from left menu2 = wx.Menu();menu3 = wx.Menu();menu4 = wx.Menu();menu5 = wx.Menu();menu6 = wx.Menu() menu7 = wx.Menu() # a submenu in the 2nd menu submenu1 = wx.Menu() renmenu1 = wx.MenuItem(submenu1, 20111, "Renewal");submenu1.AppendItem(renmenu1) invmenu1 = wx.MenuItem(submenu1, 20112, "New Invoice");submenu1.AppendItem(invmenu1) prmmenu1 = wx.MenuItem(submenu1, 20114, "Premium Balance");submenu1.AppendItem(prmmenu1) brtmenu1 = wx.MenuItem(submenu1, 20115, "Birthday Message");submenu1.AppendItem(brtmenu1) extmenu1 = wx.MenuItem(submenu1, 20119, "Extension Message");submenu1.AppendItem(extmenu1) qwkmenu1 = wx.MenuItem(submenu1, 20113, "Quick Message");submenu1.AppendItem(qwkmenu1) genmenu1 = wx.MenuItem(submenu1, 20116, "General Message");submenu1.AppendItem(genmenu1) submenu12 = wx.Menu() # Group database genmenu2 = wx.MenuItem(submenu1, 20117, "General Message") genmenu2.SetFont(self.font) submenu12.AppendItem(genmenu2) submenu2 = wx.Menu() submenu2.Append(20211, "&New Invoice") submenu2.Append(20212, "&Premium Balance") submenu2.Append(20216, "&Renewal Letters") if self.user == "manager" or self.user == "admin" or self.user == "root": submenu2.Append(20213, "&General Letters") submenu21 = wx.Menu() if self.user == "manager" or self.user == "admin" or self.user == "root": submenu21.Append(20215, "&General Letters") submenu3 = wx.Menu()#Group database submenu3.Append(20311, "&Renewal");submenu3.Append(20312, "&Premium Balance") submenu3.Append(20313, "&New Invoice");submenu3.Append(20314, "&Birthday Message") submenu3.Append(20315, "&Quick Message");submenu3.Append(20316, "&General Message") supersubmenu = wx.Menu() # supersubmenu.Append(10111, "Blacklist") # supersubmenu.Append(10112, "Sending Protocols") supersubmenu1 = wx.Menu() supersubmenu1.AppendMenu(2011, "System Clients",submenu1) supersubmenu1.AppendMenu(2012, "&Groups",submenu12) supersubmenu2 = wx.Menu() supersubmenu2.AppendMenu(2021, "System Clients",submenu2) supersubmenu2.AppendMenu(2022, "&Groups",submenu21) supersubmenu3 = wx.Menu() supersubmenu3.Append(2031, "System Clients") supersubmenu3.Append(2032, "Groups") supersubmenu4 = wx.Menu() supersubmenu4.Append(20411, "Outbox") supersubmenu4.Append(20412, "Create New") menu2.Append(101, "Company Info") menu2.Append(103, "User Account") # menu2.Append(104, "Audit Trail") # menu2.AppendMenu(105, "SMS settings", supersubmenu) menu3.AppendMenu(201, "SMS", supersubmenu1) # menu3.AppendMenu(202, "Letters", supersubmenu2) # menu3.AppendMenu(203, "Emails", supersubmenu3) menu4.AppendMenu(301, "System Clients",supersubmenu4) menu4.Append(302, "&Groups") menu5.Append(402, "Outbox") menu5.Append(401, "Inbox") menu6.Append(501, "Application Settings") if self.user == "manager" or self.user == "admin" or self.user == "root": menu6.Append(502, "Group Settings") menu7.Append(601, "Add new") menu7.Append(602, "Manage Cheques") # Append 2nd menu if self.user == "admin" or self.user == "root": menuBar.Append(menu2, "&Admin") menuBar.Append(menu3, "&Send") menuBar.Append(menu5, "Messages") menuBar.Append(menu7, "Cheques") if self.user == "admin" or self.user == "root": menuBar.Append(menu6, "Control Panel") self.SetMenuBar(menuBar) self.Bind(wx.EVT_MENU, self.OnCompanyinfo, id=101) self.Bind(wx.EVT_MENU, self.OnServerInterface, id=102) self.Bind(wx.EVT_MENU, self.OnUserAccounts, id=103) self.Bind(wx.EVT_MENU, self.OnAuditTrail, id=104) self.Bind(wx.EVT_MENU, self.OnProtocol, id=10112) self.Bind(wx.EVT_MENU, self.OnNewInvoice, id=20211) self.Bind(wx.EVT_MENU, self.OnBalLetters, id=20212) self.Bind(wx.EVT_MENU, self.OnGenLetters, id=20213) self.Bind(wx.EVT_MENU, self.OnRenLetters, id=20216) self.Bind(wx.EVT_MENU, self.OnExit,exitMenuItem) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20111) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20112) if self.user == "admin" or self.user == "root": self.Bind(wx.EVT_MENU, self.OnResart, id=0001) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20113) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20116) self.Bind(wx.EVT_MENU, self.OnGroupGenLetters, id=20215) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20113) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20116) self.Bind(wx.EVT_MENU, self.OnUserUpdate, id=0002) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20114) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20115) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20117) self.Bind(wx.EVT_MENU, self.OnSmsPanel, id=20119) self.Bind(wx.EVT_MENU, self.OnOutbox, id=401) self.Bind(wx.EVT_MENU, self.OnInbox, id=402) self.Bind(wx.EVT_MENU, self.application_settings, id=501) self.Bind(wx.EVT_MENU, self.OnGroupSettings, id=502) self.Bind(wx.EVT_MENU, self.cheque_panel, id=601) self.Bind(wx.EVT_MENU, self.manage_cheque_panel, id=602) if SHOW_BACKGROUND: self.bg_bmp = GridBG.GetBitmap() self.GetClientWindow().Bind( wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground ) self.sb = CustomStatusBar(self,self.user) self.SetStatusBar(self.sb) def _initialize(self): folder1= "letters";folder3= "letPrinted" folder2= "envelopes";folder4= "envPrinted" if os.path.exists(folder1): try:shutil.rmtree(folder3);os.mkdir(folder3) except WindowsError,e:os.mkdir(folder3) shutil.move(folder1,folder3) try:os.mkdir(folder1) except:pass else: os.mkdir(folder1); if not os.path.exists(folder3): os.mkdir(folder3) if os.path.exists(folder2): try:shutil.rmtree(folder4);os.mkdir(folder4) except WindowsError,e:os.mkdir(folder4) shutil.move(folder2,folder4) try:os.mkdir(folder2) except:pass else: os.mkdir(folder2) if not os.path.exists(folder4): os.mkdir(folder4) if not os.path.exists("appfiles"): os.mkdir("appfiles") def OnExit(self, evt): self.Close(True) def OnProtocol(self, evt): scp.runProtocol() def OnCompanyinfo(self, evt): win = wx.MDIChildFrame(self, -1, "Company Information",size=(690,420)) letter = companyinfo.WindowsPanel(win) win.Show(True) def OnServerInterface(self, evt): win = wx.MDIChildFrame(self, -1, "Server Interface",size=(600,420)) # letter = serverframe.MainFrame(win) win.Show(True) def OnAuditTrail(self, evt): win = wx.MDIChildFrame(self, -1, "Audit Trail",size=(600,700)) letter = audit.SimpleLog(win,wx.ID_ANY) win.Show(True) def OnNewInvoice(self, evt): win = wx.MDIChildFrame(self, -1, "New Invoice Letters",size=(1000,480)) letter = letterspanel.Letters(win,"newinvoice") win.Show(True) def OnBalLetters(self, evt): win = wx.MDIChildFrame(self, -1, "Balance Letters",size=(1000,460)) letter = letterspanel.Letters(win,"balance") win.Show(True) def OnGenLetters(self, evt): win = wx.MDIChildFrame(self, -1, "General Letters",size=(1000,500)) letter = letterspanel.Letters(win,"general") win.Show(True) def OnGroupGenLetters(self, evt): win = wx.MDIChildFrame(self, -1, "General Letters",size=(1000,500)) letter = gletterspanel.Letters(win,"general") win.Show(True) def OnRenLetters(self, evt): win = wx.MDIChildFrame(self, -1, "Renewal Letters",size=(1000,500)) letter = letterspanel.Letters(win,"renewal") win.Show(True) def OnSmsPanel(self, evt): identity= evt.GetId() if identity == 20111: win = wx.MDIChildFrame(self, -1, "Renewal Messages", size=(1000, 525)) MessagePanel.Messages(win, "renewal") elif identity == 20112: win = wx.MDIChildFrame(self, -1, "New Invoice",size=(1000, 500)) MessagePanel.Messages(win, "newinvoice") elif identity == 20113: win = wx.MDIChildFrame(self, -1, "Quick Message", size=(620, 370)) MessagePanel.Messages(win, "quicktxt") elif identity == 20114: win = wx.MDIChildFrame(self, -1, "Balance Messages", size=(1000, 500)) MessagePanel.Messages(win, "balance") elif identity == 20115: win = wx.MDIChildFrame(self, -1, "Birthday", size=(706, 511)) MessagePanel.Messages(win, "birthday") elif identity == 20116: win = wx.MDIChildFrame(self, -1, "General Message", size=(1000, 500)) MessagePanel.Messages(win, "general") elif identity == 20117: win = wx.MDIChildFrame(self, -1, "General Message", size=(1000, 500)) gmessagePanel.Messages(win, "general") elif identity == 20119: win = wx.MDIChildFrame(self, -1, "Extension Message", size=(1000, 500)) MessagePanel.Messages(win, "extensions") else: pass win.Show(True) def application_settings(self, evt): win = wx.MDIChildFrame(self, -1, "Settings", size=(810, 520)) panels.ControlPanel(win) def OnGroupSettings(self,evt): if self.user == "manager" or self.user == "admin" or self.user == "root": threading.Thread(target=dg.runDialogue).start() else: server = ServerAccess() server.get_group_clients() fun = groupf() fun.update_gclients() wx.MessageBox("Update") return def OnResart(self, evt): server = ServerAccess() server.get_appfiles() def OnUserUpdate(self, evt): win = wx.MDIChildFrame(self, -1, "Company Information", size=(550, 220)) letter = userupdate.WindowsPanel(win) win.Show(True) def OnUserAccounts(self, evt): threading.Thread(target=ap.runAccounts).start() return def OnOutbox(self, evt): wx.MessageBox("Inbox is Empty", "Messages", wx.ICON_INFORMATION) def OnInbox(self, evt): win = wx.MDIChildFrame(self, -1, "Outbox", size=(600,650)) letter = InboxPanel(win) def OnEraseBackground(self, evt): dc = evt.GetDC() sz = self.GetClientSize() w = self.bg_bmp.GetWidth() h = self.bg_bmp.GetHeight() x = 0 while x < sz.width: y = 0 while y < sz.height: dc.DrawBitmap(self.bg_bmp, x, y) y = y + h x = x + w def cheque_panel(self, evt): win = wx.MDIChildFrame(self, -1, "Add Cheques", size=(520, 565)) panels.AddChequePanel(win) def manage_cheque_panel(self, evt): win = wx.MDIChildFrame(self, -1, "Manage Cheques", size=(800, 565)) panels.ManageChequePanel(win)class CustomStatusBar(wx.StatusBar): def __init__(self, parent,user): wx.StatusBar.__init__(self, parent, -1) self.SetFieldsCount(3) self.SetStatusWidths([-2, -1, -2]) self.sizeChanged = False self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_IDLE, self.OnIdle) self.SetStatusText("Logged in as %s"%user, 0) self.cb = wx.CheckBox(self, 1001, "Set Timer") self.Bind(wx.EVT_CHECKBOX, self.OnToggleClock, self.cb) self.cb.SetValue(True) self.Reposition() self.timer = wx.PyTimer(self.Notify) self.timer.Start(1000) self.Notify() def Notify(self): t = time.localtime(time.time()) st = time.strftime("%d-%b-%Y %I:%M:%S", t) self.SetStatusText(st, 2) def OnToggleClock(self, event): self.cb.GetValue() self.timer.Start(1000) self.Notify() self.cb.SetLabel("Stop Server") def OnSize(self, evt): evt.Skip() self.Reposition() self.sizeChanged = True def OnIdle(self, evt): if self.sizeChanged: self.Reposition() def Reposition(self): rect = self.GetFieldRect(1) rect.x += 1 rect.y += 1 self.cb.SetRect(rect) self.sizeChanged = False# ----------------------------------------------------------------------details = []def fileInit(): if not os.path.exists("bin/compdetails.dat"): return try: with open("bin/compdetails.dat", "rb") as newfile: appinfo = Pickle.load(newfile) except: return {'apptitle': "Company Messenger"} return appinfoclass MyApp(wx.App): def OnInit(self): global details myinfo = details appinfo = fileInit() frame = MainFrame(myinfo, appinfo) frame.Show(True) self.SetTopWindow(frame) return Truedef main(info): global details details = info app = MyApp(False) try: reactor.registerWxApp(app) reactor.run() except:pass if not os.path.exists("tmp"): os.mkdir("tmp") log.startLogging(open("tmp/clientLog.log", "w")) app.MainLoop()if __name__ == "__main__": main(['admin', 'password'])