#! /usr/bin/env python # -*- coding: utf8 -*- ################################################################################# # # # Title: Kory # # Describe: Application that manage Phone Calls Costs # # Author: Andrea Marin # # Contact: amarin@mr-service.it # # Release: 0.0.1 # # Licence: GPLv2 # # # ################################################################################# import wx, os, pickle class MainWindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(550, 450)) # Create MenuBar menubar = wx.MenuBar() # Create item Menu of MenuBar file = wx.Menu() edit = wx.Menu() help = wx.Menu() #File menu items file.Append(103, '&New\tCtrl+N', 'New document...') file.Append(101, '&Open\tCtrl+O', 'Open document...') file.Append(102, '&Save\tCtrl+S', 'Save document...') file.AppendSeparator() quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit Kory Application') file.AppendItem(quit) #Edit menu ites edit.Append(201, 'Wiev List', 'Wiev list mode')#, kind=wx.ITEM_CHECK) edit.Append(202, 'Wiev Tree', 'Wiev tree mode')#, kind=wx.ITEM_CHECK) # Sub menu of edit items submenu = wx.Menu() submenu.Append(301, 'Red', kind=wx.ITEM_RADIO) submenu.Append(302, 'Blue', kind=wx.ITEM_RADIO) submenu.Append(303, 'Yellow', kind=wx.ITEM_RADIO) edit.AppendMenu(203, 'Set Colors', submenu) #Help menu items help.Append(401, '&About\tCtrl+A', 'About Kory Application') #Attach menu to the menubar menubar.Append(file, '&File') menubar.Append(edit, '&Edit') menubar.Append(help, '&Help') self.SetMenuBar(menubar) self.Centre() #Attach the menu-event to the method self.Bind(wx.EVT_MENU, self.OnNew, id=103) self.Bind(wx.EVT_MENU, self.OnOpen, id=101) self.Bind(wx.EVT_MENU, self.OnSave, id=102) self.Bind(wx.EVT_MENU, self.OnAbout, id=401) self.Bind(wx.EVT_MENU, self.OnQuit, id=105) #Create and customize StatusBar self.CreateStatusBar() self.SetStatusText('Kory Application...') #Add panel between menubar and statusbar self.panel = wx.Panel(self) #Create control on the panel nameLbl = wx.StaticText(self.panel, -1, 'Corporate Name:', pos = (5, 20)) numofcallsLbl = wx.StaticText(self.panel, -1, 'Number of Calls:', pos = (5, 50)) localLbl = wx.StaticText(self.panel, -1, 'Total local cost:', pos = (5, 80)) localmrLbl = wx.StaticText(self.panel, -1, 'Total local cost MR:', pos = (5, 110)) totaldurationLbl = wx.StaticText(self.panel, -1, 'Total Duration (H:M:S):', pos = (5, 140)) costtotheminuteLbl = wx.StaticText(self.panel, -1, 'Cost to the minute:', pos =(5, 170)) costtotheminutewithmrLbl = wx.StaticText(self.panel, -1, 'Cost to the minute with MR:', pos =(5, 200)) overpricelLbl = wx.StaticText(self.panel, -1, 'Over Price MR (%):', pos =(5, 230)) mrcosttotheminuteLbl = wx.StaticText(self.panel, -1, 'MR Cost to the minute:', pos = (5, 260)) self.name = wx.TextCtrl(self.panel, -1, '', pos = (200,15), size = (250, -1)) self.name.SetFocus() self.numofcalls = wx.TextCtrl(self.panel, -1, '', pos = (200, 45)) self.local = wx.TextCtrl(self.panel, -1, '', pos = (200, 75)) self.localmr = wx.TextCtrl(self.panel, -1, '', pos = (200, 105), size = (140, -1)) self.localmr.SetBackgroundColour('#ffdf85') self.localmr.Disable() self.totalduration_h = wx.TextCtrl(self.panel, -1, '', pos = (200, 135), size = (40, -1)) wx.StaticText(self.panel, -1, ':', pos = (243, 140)) self.totalduration_m = wx.TextCtrl(self.panel, -1, '', pos = (250, 135), size = (40, -1)) wx.StaticText(self.panel, -1, ':', pos = (292, 140)) self.totalduration_s = wx.TextCtrl(self.panel, -1, '', pos = (300, 135), size = (40, -1)) self.costtotheminute = wx.TextCtrl(self.panel, -1, '', pos = (200, 165), size = (140, -1)) self.costtotheminute.SetBackgroundColour('#ffdf85') self.costtotheminute.Disable() self.costtotheminutewithmr = wx.TextCtrl(self.panel, -1, '', pos = (200, 195)) self.costtotheminutewithmr.SetBackgroundColour('#ffdf85') self.costtotheminutewithmr.Disable() self.overprice = wx.TextCtrl(self.panel, -1, '', pos = (200, 225)) self.mrcosttotheminute = wx.TextCtrl(self.panel, -1, '0.0105', pos = (200, 255)) #Create control buttom #o = wx.Button(self.panel, -1, 'Open', pos = (100, 360)) #self.Bind(wx.EVT_BUTTON, self.OnOpen, o) c = wx.Button(self.panel, -1, 'Calculate', pos = (300, 255)) self.Bind(wx.EVT_BUTTON, self.OnCalculate, c) #b = wx.Button(self.panel, -1, 'Save', pos = (0, 360)) #self.Bind(wx.EVT_BUTTON, self.OnSave, b) #Create event def section def OnNew(self, event): self.name.SetValue('') self.name.SetFocus() self.numofcalls.SetValue('') self.local.SetValue('') self.local.SetBackgroundColour('#FFFFFF') self.localmr.Disable() self.localmr.SetValue('') self.localmr.SetBackgroundColour('#ffdf85') self.totalduration_h.SetValue('') self.totalduration_m.SetValue('') self.totalduration_s.SetValue('') self.costtotheminute.Disable() self.costtotheminute.SetValue('') self.costtotheminute.SetBackgroundColour('#ffdf85') self.costtotheminutewithmr.Disable() self.costtotheminutewithmr.SetValue('') self.costtotheminutewithmr.SetBackgroundColour('#ffdf85') self.overprice.SetValue('') self.mrcosttotheminute.SetValue('0.0105') def OnOpen(self, event): self.data = {} self.dirname = '' dlg = wx.FileDialog(self, 'Chose a file', self.dirname, '', '*.*', wx.OPEN) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetFilename() self.dirname = dlg.GetDirectory() f = open(os.path.join(self.dirname, self.filename), 'r') dlg.Destroy() #Load value from file self.data = pickle.load(f) self.name.SetValue(self.data['Corporate_Name']) self.name.SetFocus() self.numofcalls.SetValue(self.data['Number_of_Calls']) self.local.SetValue(self.data['Total_local_cost']) self.local.SetBackgroundColour('#FFDEAD') self.localmr.Enable() self.localmr.SetValue(self.data['Total_local_cost_MR']) self.localmr.SetBackgroundColour('#FFDEAD') self.totalduration_h.SetValue(self.data['Total_Duration_Calls_H']) self.totalduration_m.SetValue(self.data['Total_Duration_Calls_M']) self.totalduration_s.SetValue(self.data['Total_Duration_Calls_S']) self.costtotheminute.Enable() self.costtotheminute.SetValue(self.data['Cost_to_the_minute']) self.costtotheminute.SetBackgroundColour('#90EE90') self.costtotheminutewithmr.Enable() self.costtotheminutewithmr.SetValue(self.data['Cost_to_the_minute_with_MR']) self.costtotheminutewithmr.SetBackgroundColour('#90EE90') self.overprice.SetValue(self.data['Over_price_MR']) self.mrcosttotheminute.SetValue(self.data['MR_Cost_to_the_minute']) f.close() def OnSave(self, event): #Get value from user rag_soc = self.name.GetValue() quantity = self.numofcalls.GetValue() tot_local_cost = self.local.GetValue() tot_mr_local_cost = self.localmr.GetValue() hours = self.totalduration_h.GetValue() minutes = self.totalduration_m.GetValue() seconds = self.totalduration_s.GetValue() minute_cost = self.costtotheminute.GetValue() minute_mr_cost = self.costtotheminutewithmr.GetValue() over_price = self.overprice.GetValue() mr_minute_cost = self.mrcosttotheminute.GetValue() #Create a dictionary for save data into a file self.data = {} self.data['Corporate_Name'] = rag_soc self.data['Number_of_Calls'] = quantity self.data['Total_local_cost'] = tot_local_cost self.data['Total_local_cost_MR'] = tot_mr_local_cost self.data['Total_Duration_Calls_H'] = hours self.data['Total_Duration_Calls_M'] = minutes self.data['Total_Duration_Calls_S'] = seconds self.data['Cost_to_the_minute'] = minute_cost self.data['Cost_to_the_minute_with_MR'] = minute_mr_cost self.data['Over_price_MR'] = over_price self.data['MR_Cost_to_the_minute'] = mr_minute_cost self.dirname = '' dlg = wx.FileDialog(self, "Chose a file", self.dirname, '', '*.*', wx.SAVE) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetFilename() self.dirname = dlg.GetDirectory() f = open(os.path.join(self.dirname, self.filename), 'w') pickle.dump(self.data, f) f.close() dlg.Destroy def OnCalculate(self, event): #Get values from GUI h = self.totalduration_h.GetValue() m = self.totalduration_m.GetValue() s = self.totalduration_s.GetValue() tot_local = self.local.GetValue() over = self.overprice.GetValue() mrcost = self.mrcosttotheminute.GetValue() #Make operation for calculate the values second = (((float(h) * 60) * 60) + (float(m) * 60) + float(s)) costminute = (float(tot_local)/float(second)) * 60 overcostmr = (float(mrcost) + ((float(mrcost) * float(over)) / 100)) tot_localmr = (float(overcostmr) * (float(second)) / 60) #Set the control with new values self.local.SetBackgroundColour('#FFDEAD') self.costtotheminute.Enable() self.costtotheminute.SetValue(unicode(costminute)) self.costtotheminute.SetBackgroundColour('#90EE90') self.costtotheminutewithmr.Enable() self.costtotheminutewithmr.SetValue(unicode(overcostmr)) self.costtotheminutewithmr.SetBackgroundColour('#90EE90') self.localmr.Enable() self.localmr.SetValue(unicode(tot_localmr)) self.localmr.SetBackgroundColour('#FFDEAD') #Refresh for change color under windows self.Refresh() def OnQuit(self, event): self.Close() def OnAbout(self, event): msg = "This is the Kory application for analisys of calls cost.\n" + \ "Author: Andrea Marin @ 05 Apr 2007\n" + \ "Please report any Bug/Requests of improvements\n" + \ "to me at the following adresses:\n\n" + \ "Mail : amarin@mr-service.it\n" + "IM : baba-andrea@jabber.org\n" + \ "Skype : baba-andrea79\n\n" + "GUI with wxPython " + wx.VERSION_STRING + " !!!" dlg = wx.MessageDialog(self, msg, "About panel Kory application", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() class MyApp(wx.App): def OnInit(self): frame = MainWindow(None, -1, 'Welcome to Kory Phone Calls Application') frame.Show(True) self.SetTopWindow(frame) return True app = MyApp() app.MainLoop()