ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/Trunk/MCP_CopyUp_Request_UI.py
Revision: 258
Committed: Tue Jan 29 15:56:46 2013 UTC (13 years, 2 months ago) by nino.borges
Content type: text/x-python
Original Path: Python/NinoCode/Active_prgs/MCP/MCP_CopyUp_Request_UI.py
File size: 19714 byte(s)
Log Message:
Finished adding feature Copy From Vendor Folder (#39) to copyup. Added menu items for settings, linked vendor folders and alternate media path to view edit ui

File Contents

# User Rev Content
1 ninoborges 8 """
2    
3     MCP_CopyUp_Request_UI
4    
5     Created by
6     Emanuel Borges
7     10.25.2010
8    
9     This is the GUI to the MCP_CopyUp_Request program.
10    
11     """
12    
13 nino.borges 258 import wx, MCP_Lib, MCP_CopyUp_Request,os,WorkDirDialog
14 ninoborges 8 import wx.lib.filebrowsebutton as filebrowse
15    
16     class MyFrame(wx.Frame):
17     def __init__(self, parent, ID, title, pos=wx.DefaultPosition):
18 nino.borges 258 self.workDir = os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working")
19 nino.borges 203 wx.Frame.__init__(self, parent, ID, title, pos, size =(585,450))
20 ninoborges 8 self.panel = wx.Panel(self,-1)
21     #self.panel.SetBackgroundColour("yellow green")
22     casesListStaticText = wx.StaticText(self.panel, -1, "Select Case: ",wx.DefaultPosition)
23 nino.borges 189 #casesList,casesDir = MCP_Lib.GetCaseList()
24 nino.borges 232 print "connecting to matter tracking access db..."
25     self.accessDB = MCP_Lib.AccessDBConnection(r"\\chiads01\app\DS_CaseTrack\TPM_CaseTracking.mdb")
26     print "connected to DB."
27     self.myCases, self.officeCases, self.allCases, casesDir = MCP_Lib.GetCaseList('',self.accessDB)
28 nino.borges 189 self.casesListChoice = wx.Choice(self.panel, -1, wx.DefaultPosition, choices=self.myCases)
29 ninoborges 8 platformStaticText = wx.StaticText(self.panel, -1, "Select Platform:",wx.DefaultPosition)
30     platformChoices = ["Concordance DIS","Concordance LN","Relativity"]
31     self.platformListChoice = wx.Choice(self.panel, -1, wx.DefaultPosition, choices=platformChoices)
32 nino.borges 258
33 nino.borges 203 #workDirStaticText = wx.StaticText(self.panel, -1, "Select Work Dir:",wx.DefaultPosition)
34     #self.workDirControl = wx.TextCtrl(self.panel,-1,os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working"), size=(296,-1))
35     #workDirBrowseButton = wx.Button(self.panel, -1, "Browse", (10, 10))
36 ninoborges 8
37    
38     self.radio1 = wx.RadioButton(self.panel, -1, 'Individual File',style=wx.RB_GROUP)
39     self.fileBowserControl = wx.TextCtrl(self.panel, -1,size=(296,-1))
40     self.fileBowserButton = wx.Button(self.panel, -1, "Browse", (10, 10))
41    
42     self.requestAssistanceCheckBox = wx.CheckBox(self.panel,-1,": Request Data Analyst Assistance")
43     self.requestAssistanceCheckBox.Enable(False) ## Change me when you go live with this service.
44    
45     self.radio2 = wx.RadioButton(self.panel, -1, 'Entire folder of Files')
46     self.dirBowserControl = wx.TextCtrl(self.panel, -1, size=(296,-1))
47     self.dirBowserButton = wx.Button(self.panel, -1, "Browse", (10, 10))
48     self.dirBowserControl.Enable(False)
49     self.dirBowserButton.Enable(False)
50    
51 nino.borges 203 self.radio3 = wx.RadioButton(self.panel, -1, 'From Vendor Folder')
52     self.vendorBowserControl = wx.TextCtrl(self.panel, -1, size=(296,-1))
53     self.vendorBowserButton = wx.Button(self.panel, -1, "Browse", (10, 10))
54     self.vendorBowserControl.Enable(False)
55     self.vendorBowserButton.Enable(False)
56 ninoborges 8
57 nino.borges 203
58 ninoborges 8 self.CreateBoxesSection()
59     copyUpTypeStaticBox = wx.StaticBox(self.panel, -1, 'Copy Up:')
60     copyUpTypeStaticBoxSizer = wx.StaticBoxSizer(copyUpTypeStaticBox, wx.VERTICAL)
61    
62     radio1Sizer = wx.FlexGridSizer(1,3,10,10)
63     radio1Sizer.Add(self.radio1, 0, 0)
64     radio1Sizer.Add(self.fileBowserControl, 0)
65     radio1Sizer.Add(self.fileBowserButton, 0)
66     copyUpTypeStaticBoxSizer.Add(radio1Sizer, 0, wx.ALL|wx.ALIGN_LEFT,20)
67 nino.borges 203
68 ninoborges 8 radio2Sizer = wx.FlexGridSizer(1,3,10,10)
69     radio2Sizer.Add(self.radio2, 0)
70     radio2Sizer.Add(self.dirBowserControl, 0)
71     radio2Sizer.Add(self.dirBowserButton, 0)
72 nino.borges 203
73 ninoborges 8 copyUpTypeStaticBoxSizer.Add(radio2Sizer, 0, wx.ALL|wx.ALIGN_LEFT,20)
74 nino.borges 203 radio3Sizer = wx.FlexGridSizer(1,3,10,10)
75     radio3Sizer.Add(self.radio3, 0)
76     radio3Sizer.Add(self.vendorBowserControl, 0)
77     radio3Sizer.Add(self.vendorBowserButton, 0)
78     copyUpTypeStaticBoxSizer.Add(radio3Sizer, 0, wx.ALL|wx.ALIGN_LEFT,20)
79 ninoborges 8
80     casesSizer = wx.FlexGridSizer(2,2,15,5)
81     casesSizer.Add(casesListStaticText)
82     casesSizer.Add(self.casesListChoice)
83     casesSizer.Add(platformStaticText)
84     casesSizer.Add(self.platformListChoice)
85     #casesSizer = wx.BoxSizer(wx.HORIZONTAL)
86     #casesSizer.Add(casesListStaticText,0,wx.ALL,5)
87     #casesSizer.Add(self.casesListChoice,0,wx.ALL,5)
88     #casesSizer.Add(platformStaticText,0,wx.ALL,5)
89     #casesSizer.Add(self.platformListChoice,0,wx.ALL,5)
90 nino.borges 203 #workDirSizer = wx.BoxSizer(wx.HORIZONTAL)
91     #workDirSizer.Add(workDirStaticText,0,wx.ALL,5)
92     #workDirSizer.Add(self.workDirControl,0,wx.ALL,5)
93     #workDirSizer.Add(workDirBrowseButton,0,wx.ALL,5)
94 ninoborges 8 mainSizer = wx.BoxSizer(wx.VERTICAL)
95     mainSizer.Add(casesSizer,0,wx.ALL, 20)
96 nino.borges 203 #mainSizer.Add(workDirSizer,0,wx.ALL, 10)
97 ninoborges 8 mainSizer.Add(copyUpTypeStaticBoxSizer, 0, wx.ALL, 10)
98     mainSizer.Add(self.requestAssistanceCheckBox,0,wx.ALL|wx.ALIGN_CENTER,5)
99 nino.borges 203
100    
101 ninoborges 8 mainSizer.Add(self.buttonSizer,0, wx.ALL|wx.ALIGN_BOTTOM|wx.ALIGN_CENTER, 10)
102    
103     self.panel.SetSizer(mainSizer)
104 nino.borges 189 self.CreateMenuBar()
105 ninoborges 8 self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.radio1)
106     self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.radio2)
107 nino.borges 203 self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.radio3)
108     #self.Bind(wx.EVT_BUTTON, self.OnBrowseClick, workDirBrowseButton)
109 ninoborges 8 self.Bind(wx.EVT_BUTTON, self.OnBrowseClick, self.fileBowserButton)
110     self.Bind(wx.EVT_BUTTON, self.OnBrowseClick, self.dirBowserButton)
111 nino.borges 203 self.Bind(wx.EVT_BUTTON, self.OnBrowseClick, self.vendorBowserButton)
112 ninoborges 8 self.Bind(wx.EVT_BUTTON, self.OnProcess, self.oKButton)
113     self.Bind(wx.EVT_BUTTON, self.CloseWindow, self.cancelButton)
114    
115     def OnRadio(self,event):
116     radioObj = event.GetEventObject()
117     selection = radioObj.GetLabel()
118     if selection == "Individual File":
119     self.fileBowserControl.Enable(True)
120     self.fileBowserButton.Enable(True)
121    
122     self.dirBowserControl.Enable(False)
123     self.dirBowserButton.Enable(False)
124 nino.borges 203 self.vendorBowserControl.Enable(False)
125     self.vendorBowserButton.Enable(False)
126    
127 ninoborges 8 self.dirBowserControl.SetValue("")
128 nino.borges 203 self.vendorBowserControl.SetValue("")
129    
130     elif selection == "Entire folder of Files":
131     self.dirBowserControl.Enable(True)
132     self.dirBowserButton.Enable(True)
133    
134     self.fileBowserControl.Enable(False)
135     self.fileBowserButton.Enable(False)
136     self.vendorBowserControl.Enable(False)
137     self.vendorBowserButton.Enable(False)
138    
139     self.fileBowserControl.SetValue("")
140     self.vendorBowserControl.SetValue("")
141    
142 ninoborges 8 else:
143 nino.borges 203 self.vendorBowserControl.Enable(True)
144     self.vendorBowserButton.Enable(True)
145    
146 ninoborges 8 self.fileBowserControl.Enable(False)
147     self.fileBowserButton.Enable(False)
148 nino.borges 203 self.dirBowserControl.Enable(False)
149     self.dirBowserButton.Enable(False)
150    
151 ninoborges 8 self.fileBowserControl.SetValue("")
152 nino.borges 203 self.dirBowserControl.SetValue("")
153 ninoborges 8
154     #if self.selectedText:
155     # self.selectedText.Enable(False)
156     #radioSelected = event.GetEventObject()
157     #text = self.texts[radioSelected.GetLabel()]
158     #text.Enable(True)
159     #self.selectedText = text
160    
161     def OnBrowseClick(self,event):
162     eventCode = event.GetId()
163     #print eventCode
164 nino.borges 203 #if eventCode == -209:
165     # dlg = wx.DirDialog(self, message = "Working Directory Path: ", defaultPath = os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working"))
166     # if dlg.ShowModal() == wx.ID_OK:
167     # dirPath = dlg.GetPath()
168     # dlg.Destroy()
169     # self.workDirControl.SetValue(dirPath)
170 ninoborges 8 if eventCode == -209:
171     dlg = wx.FileDialog(self, message="Select file to copy up:",defaultDir=os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working"), defaultFile="",wildcard= "*.*",style=wx.OPEN | wx.CHANGE_DIR)
172     #dlg = wx.FileDialog(self, message = "Select directory to copy up: ", defaultPath = os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working"))
173     if dlg.ShowModal() == wx.ID_OK:
174     filePath = dlg.GetPath()
175     dlg.Destroy()
176 nino.borges 235 ## Test here to see if it's a zip. if not, give them warning about uncompressed size.
177 ninoborges 8 self.fileBowserControl.SetValue(filePath)
178 nino.borges 203 elif eventCode == -213:
179 ninoborges 8 dlg = wx.DirDialog(self, message = "Select directory to copy up:", defaultPath = os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working"))
180     if dlg.ShowModal() == wx.ID_OK:
181     dirPath = dlg.GetPath()
182     dlg.Destroy()
183     self.dirBowserControl.SetValue(dirPath)
184 nino.borges 203 elif eventCode == -216:
185 nino.borges 232 platform = self.platformListChoice.GetStringSelection()
186     if platform == 'Concordance LN':
187     platform = 'Concordance'
188     elif platform == 'Concordance DIS':
189     platform = None
190     if platform:
191     expdtObj = MCP_Lib.ExpeDatConnection(platform)
192     caseName = self.casesListChoice.GetStringSelection()
193     clientMatter = caseName.split("_(")[1]
194     clientMatter = clientMatter[:-1]
195     clientMatter = clientMatter.replace('-','.')
196     vendorFolder = self.accessDB.GetVendorFolderPath(clientMatter)
197     if vendorFolder:
198     folderMatrix = expdtObj.GatherFullDirListMatrix('Uploads/%s'%vendorFolder)
199     dlg = VendorBrowserDialog(self,vendorFolder,folderMatrix)
200     if dlg.ShowModal() == wx.ID_OK:
201     vendorPath = dlg.GetValues()
202     dlg.Destroy()
203     self.vendorBowserControl.SetValue(vendorPath)
204     else:
205     diag = wx.MessageDialog(self,"MCP: No vendor folder is currently linked to this case.","Does not exist",wx.OK | wx.ICON_INFORMATION)
206     diag.ShowModal()
207     diag.Destroy()
208     else:
209     diag = wx.MessageDialog(self,"MCP: Copying from LN to DIS is not yet supported.","ERROR",wx.OK | wx.ICON_INFORMATION)
210     diag.ShowModal()
211     diag.Destroy()
212 ninoborges 8
213     def CreateBoxesSection(self):
214     self.oKButton = wx.Button(self.panel, wx.ID_OK)
215     self.oKButton.SetDefault()
216     self.oKButton.SetSize(self.oKButton.GetBestSize())
217     self.cancelButton = wx.Button(self.panel, wx.ID_CANCEL)
218     self.cancelButton.SetSize(self.cancelButton.GetBestSize())
219     self.buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
220     self.buttonSizer.Add(self.oKButton,0,wx.ALL,10)
221     self.buttonSizer.Add(self.cancelButton,0,wx.ALL,10)
222    
223 nino.borges 189 def MenuData(self):
224     return(("View",
225     ("My Cases", "Chooses from your assigned cases.",self.OnChangeCaseView,"RADIO"),
226     ("My Office Cases", "Chooses from cases assigned to everyone in your office.",self.OnChangeCaseView,"RADIO"),
227     ("All Cases", "Chooses from all cases.",self.OnChangeCaseView,"RADIO")),
228 nino.borges 203 ("&Settings",
229     ("&Working Directory", "Allows you to change the local Buffer directory.", self.OnChangeWorkDir,"")),
230 nino.borges 189 ("&Help",
231     ("&About", "Displays the About Window.", self.OnAbout,"")))
232    
233     def CreateMenuBar(self):
234     menuBar = wx.MenuBar()
235     count = 1
236     for eachMenuData in self.MenuData():
237     menuLabel = eachMenuData[0]
238     menuItems = eachMenuData[1:]
239     menuBar.Append(self.CreateMenu(menuItems), menuLabel)
240     count = count + 1
241     self.SetMenuBar(menuBar)
242    
243    
244     def CreateMenu(self, menuData):
245     menu = wx.Menu()
246     for eachLabel, eachStatus, eachHandler, eachType in menuData:
247     if not eachLabel:
248     menu.AppendSeparator()
249     continue
250     if eachType == "RADIO":
251     menuItem = menu.AppendRadioItem(-1,eachLabel,eachStatus)
252     else:
253     menuItem = menu.Append(-1, eachLabel, eachStatus)
254     self.Bind(wx.EVT_MENU, eachHandler, menuItem)
255     return menu
256    
257 ninoborges 8 def CloseWindow(self, event):
258     self.Close(True)
259 nino.borges 189
260     def OnChangeCaseView(self,event):
261     self.casesListChoice.Clear()
262     eventID = event.GetId()
263     if eventID == 100:
264     #change it to my cases
265     self.casesListChoice.SetItems(self.myCases)
266    
267    
268     if eventID == 101:
269     #change it to office cases
270     self.casesListChoice.SetItems(self.officeCases)
271    
272    
273     if eventID == 102:
274     #change it to all cases
275     self.casesListChoice.SetItems(self.allCases)
276    
277    
278 nino.borges 203 def OnChangeWorkDir(self,event):
279 nino.borges 258 dlg = WorkDirDialog.WorkDirDialog(self, self.workDir)
280     if dlg.ShowModal() == wx.ID_OK:
281     self.workDir = dlg.GetValues()
282     #print self.workDir
283     dlg.Destroy()
284    
285 ninoborges 8
286     def OnProcess(self, event):
287     caseName = self.casesListChoice.GetStringSelection()
288     platform = self.platformListChoice.GetStringSelection()
289 nino.borges 235 ## CHANGE to the new place
290     #workDir = self.workDirControl.GetValue()
291 nino.borges 258 #workDir = os.path.join(os.environ.get("USERPROFILE"),"Desktop\\Working")
292 nino.borges 235
293 ninoborges 8 if self.radio1.GetValue():
294     startSelection = self.fileBowserControl.GetValue()
295 nino.borges 236 sourceMediaLocation = 'local'
296     elif self.radio2.GetValue():
297     startSelection = self.dirBowserControl.GetValue()
298     sourceMediaLocation = 'local'
299 ninoborges 8 else:
300 nino.borges 236 startSelection = self.vendorBowserControl.GetValue()
301     sourceMediaLocation = 'remote'
302 ninoborges 8 #startSelection = r"C:\Documents and Settings\eborges\Desktop\Working\Misc_Documents.zip"
303     self.Show(False)
304     #print "workdir is %s"%workDir
305 nino.borges 258 MCP_CopyUp_Request.Process(caseName, self.workDir, startSelection, platform, sourceMediaLocation)
306 ninoborges 8
307     #diag = wx.MessageDialog(self,"All Items processed and copied!!", "Complete",wx.OK | wx.ICON_INFORMATION)
308     #diag.ShowModal()
309     #diag.Destroy()
310     self.Destroy()
311    
312 nino.borges 189 def OnAbout(self, event):
313     """
314     OnAbout(self,event) Displays an about dialog with developer and bug reporting info
315     """
316     dlg = wx.MessageDialog(self, "MCP is a case organization program.\n"
317     "\n\n"
318     "For questions or comments about this program\n"
319     "or to report a bug, please email the program\n"
320     "creator at Nino.Borges@gmail.com\n\n"
321     "MCP is\n"
322     "Copyright (c) 2011 Emanuel Borges.\n"
323     "All rights reserved.\n"
324     "(Nino.Borges@gmail.com)\n",
325     "About MCP", wx.OK | wx.ICON_INFORMATION)
326     dlg.ShowModal()
327     dlg.Destroy()
328 ninoborges 8
329    
330 nino.borges 203 class VendorBrowserDialog(wx.Dialog):
331     def __init__(self, parent, vendorFolder, treeMatrix):
332     wx.Dialog.__init__(self, parent, -1, "Vendor Folder Browser", style = wx.DEFAULT_DIALOG_STYLE, size = (300,400))
333     #wx.Dialog.__init__(self, parent,title= "Vendor Folder Browser", size = (300,400))
334     self.vendorFolder = vendorFolder
335    
336     il = wx.ImageList(16,16)
337     self.fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER,wx.ART_OTHER, (16,16)))
338     self.fldropenidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN,wx.ART_OTHER, (16,16)))
339     self.fileidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE,wx.ART_OTHER, (16,16)))
340    
341     self.vendorTree = wx.TreeCtrl(self, size=(200,310))
342     self.vendorTree.AssignImageList(il)
343    
344     rootVendorFolderId = self.vendorTree.AddRoot(vendorFolder)
345    
346     self.AddTreeNodes(rootVendorFolderId, treeMatrix)
347     #childVendorFolderId2 = self.vendorTree.AppendItem(rootVendorFolderId,"test2")
348     #childVendorFolderId = self.vendorTree.AppendItem(childVendorFolderId2,"test")
349     self.vendorTree.Expand(rootVendorFolderId)
350    
351    
352     self.vendorTree.SetItemImage(rootVendorFolderId, self.fldridx, wx.TreeItemIcon_Normal)
353     self.vendorTree.SetItemImage(rootVendorFolderId, self.fldropenidx, wx.TreeItemIcon_Expanded)
354     ## this will need a if its a file do this else do the previous
355     #self.vendorTree.SetItemImage(childVendorFolderId, self.fileidx, wx.TreeItemIcon_Normal)
356    
357     mainSizer = wx.BoxSizer(wx.VERTICAL)
358     mainSizer.Add(self.vendorTree, 0, wx.EXPAND|wx.ALL, 5)
359    
360     oKButton = wx.Button(self, wx.ID_OK)
361     oKButton.SetDefault()
362     cancelButton = wx.Button(self, wx.ID_CANCEL)
363     buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
364     buttonSizer.Add(oKButton,0,wx.ALL,5)
365     buttonSizer.Add(cancelButton,0,wx.ALL,5)
366     mainSizer.Add(buttonSizer, 0, wx.ALIGN_CENTER|wx.ALL, 15)
367     self.SetSizer(mainSizer)
368     self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.vendorTree)
369 ninoborges 8
370 nino.borges 203 def AddTreeNodes(self, parentItem, items):
371     """
372     Recursively traverses the data structure, adding tree nodes to
373     match it.
374     """
375     for item in items:
376     if type(item) == str:
377     newItem = self.vendorTree.AppendItem(parentItem, item)
378     #self.tree.SetItemText(newItem, "A description of %s" % item, 1)
379     self.vendorTree.SetItemImage(newItem, self.fileidx,
380     wx.TreeItemIcon_Normal)
381     else:
382     newItem = self.vendorTree.AppendItem(parentItem, item[0])
383     #self.tree.SetItemText(newItem, "A description of %s" % item[0], 1)
384     self.vendorTree.SetItemImage(newItem, self.fldridx,
385     wx.TreeItemIcon_Normal)
386     self.vendorTree.SetItemImage(newItem, self.fldropenidx,
387     wx.TreeItemIcon_Expanded)
388    
389     self.AddTreeNodes(newItem, item[1])
390    
391     def OnSelChanged(self, event):
392     self.item = event.GetItem()
393     if self.item:
394     self.vendorFileSelected = self.vendorTree.GetItemText(self.item)
395     event.Skip()
396    
397     def GetValues(self):
398     vendorPath = self.vendorFileSelected
399     upItem = self.vendorTree.GetItemParent(self.item)
400     while upItem:
401     vendorPath = os.path.join(self.vendorTree.GetItemText(upItem),vendorPath)
402     upItem = self.vendorTree.GetItemParent(upItem)
403     return vendorPath
404    
405    
406 ninoborges 8 class MyApp(wx.App):
407     def OnInit(self):
408     prgVersion = MCP_Lib.GetMCPVersion()
409     self.frame = MyFrame(None, -1, "MCP Copy Up Request %s"%prgVersion)
410     self.frame.Show(True)
411     self.SetTopWindow(self.frame)
412     return True
413    
414    
415     if __name__ == '__main__':
416     app = MyApp(0)
417     app.MainLoop()