ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/MCP_Console.py
Revision: 269
Committed: Tue Feb 5 18:45:43 2013 UTC (13 years, 1 month ago) by nino.borges
Content type: text/x-python
File size: 21867 byte(s)
Log Message:
Added a vendor folder method, which calls the access method in lib

File Contents

# Content
1 """
2
3 MCP_Console
4
5 Created by
6 Emanuel Borges
7 08.28.2010
8
9 This will be the interface to add, edit and archive cases.
10
11 Should this work as one large GUI and you pick the below or read from argv and let you
12 just call it with what you want, making these three look like separate apps.
13
14
15 """
16
17 import MCP_Lib,os,shutil,ConcordanceHelperTools, time,directorySize2
18
19 class MainConsole:
20 def __init__(self):
21 ## Gather the case list
22
23 print "connecting to matter tracking access db..."
24 ## Production version
25 self.accessDB = MCP_Lib.AccessDBConnection(r"\\chiads01\app\DS_CaseTrack\TPM_CaseTracking.mdb")
26 self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo()
27 #responsibleCases,casesDir = MCP_Lib.GetCaseList('',self.accessDB)
28 myCases, officeCases, allCases,casesDir= MCP_Lib.GetCaseList('',self.accessDB)
29
30 ## Testing version
31 #self.accessDB = MCP_Lib.AccessDBConnection(r"W:\Manny\testing\TPM_CaseTracking.mdb")
32 #responsibleCases,casesDir = MCP_Lib.GetCaseList(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP",self.accessDB)
33 #self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP")
34
35 print "connected to DB."
36
37 self.responsibleCasesList = myCases
38 self.casesDir = casesDir
39
40
41 def AddNewCase(self, caseName, clientMatter, chargable = False, reviewPlatform = "", responsibleProcessingVendor = "",
42 responsibleScanningVendor = "",responsibleHostingVendor = ""):
43 ## Add the local folders The GUI should test that the clm is 10 digits and has hyphen.
44 template = os.path.join(self.casesDir,'_Template_')
45 new = os.path.join(self.casesDir, caseName + '_(%s)'%clientMatter)
46 if os.path.exists(new):
47 print "ERROR: This case already exists!!"
48 else:
49 #print template
50 #print new
51 os.mkdir(new)
52 for file in os.listdir(template):
53 shutil.copy2(os.path.join(template,file),new)
54 ## Check the H drive for the supplemental folders and the matter folder, only if they select Concordance.
55 self.SetCaseNameAndCLM(caseName,clientMatter)
56 self.AddCaseToAccessDB(caseName,clientMatter)
57
58 def AddCaseToAccessDB(self, caseName, clientMatter):
59 ## First test to see if it's already in the DB.
60 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
61 clientMatter = clientMatter.replace("-",".")
62 if clientMatter in fullClientMatterList:
63 print "This client matter already exists in the database. Skipping."
64 else:
65 print "New client matter. Adding."
66 self.accessDB.AddNewCase(caseName, clientMatter, self.tPMName,self.tPMID,responsibleOffice = self.tPMOffice)
67 print "Added!"
68
69 def EditCaseData(self,caseName,chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice, caseStatus):
70 clientMatter = caseName.split("_(")[1]
71 clientMatter = clientMatter[:-1]
72 clientMatter = clientMatter.replace('-','.')
73 self.accessDB.UpdateChargable(clientMatter,chargeableBool)
74 self.accessDB.UpdateResponsibleAttorney(clientMatter,respAttorney)
75 self.accessDB.UpdateResponsibleParalegal(clientMatter,respParalegal)
76 self.accessDB.UpdateReviewPlatform(clientMatter,revPlatform)
77 self.accessDB.UpdateResponsibleTPM(clientMatter,respTPM)
78 self.accessDB.UpdatePrimaryOffice(clientMatter,respOffice)
79 self.accessDB.UpdateResponsibleVendors(clientMatter,respVendorTpl)
80 self.accessDB.UpdateCaseStatus(clientMatter, caseStatus)
81
82 def GetCaseData(self, caseName):
83 #use this to get the data on the selected case, to populate your GUI
84 clientMatter = caseName.split("_(")[1]
85 clientMatter = clientMatter[:-1]
86 clientMatter = clientMatter.replace('-','.')
87 chargeableBool = self.accessDB.GetChargable(clientMatter)
88 respAttorney = self.accessDB.GetResponsibleAttorney(clientMatter)
89 respParalegal = self.accessDB.GetResponsibleParalegal(clientMatter)
90 respVendorTpl = self.accessDB.GetResponsibleVendorTpl(clientMatter)
91 revPlatform = self.accessDB.GetReviewPlatform(clientMatter)
92 respTPM = self.accessDB.GetResponsibleTPM(clientMatter)
93 respOffice = self.accessDB.GetPrimaryOffice(clientMatter)
94 caseStatus = self.accessDB.GetCaseStatus(clientMatter)
95 return (chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice,caseStatus)
96
97 def AddProductionEntry(self, CLM,prodID,prodDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes):
98 """This method adds one production entry to the case."""
99 errRpt = True
100 if CLM:
101 if prodID:
102 if prodDate:
103 if begBates:
104 if endBates:
105 if prodDocCount:
106 if prodPageCount:
107 if prodNotes:
108 self.accessDB.UpdateProductionDetail(CLM,prodID,prodDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes)
109 errRpt = False
110 return errRpt
111
112 def AddDataUpload(self,CLM, reviewPlatform, reportSize):
113 """This method will add one case upload."""
114 ## TODO: one day change it so that copy up requst calls this instead
115 ## of it being internal to that prog.
116 epoch = str(int(time.time()))
117 self.accessDB.UpdateCaseUpload(CLM,reviewPlatform,{epoch:(time.strftime('%m/%d/%Y'),reportSize)})
118
119 def RemoveDataUpload(self,CLM,UEPOCH):
120 """This method calls DeleteCaseUpload and removes just one case upload. """
121 err = self.accessDB.DeleteCaseUpload(CLM,UEPOCH)
122 if err:
123 print "ERROR: An Error occured and this value was not removed!"
124 else:
125 print "%s Removed"% UEPOCH
126
127 def GetUploadData(self, caseName):
128 # Used to get upload data, on the selected case, to populate the upload dialog
129 clientMatter = caseName.split("_(")[1]
130 clientMatter = clientMatter[:-1]
131 clientMatter = clientMatter.replace('-','.')
132 uploadList = self.accessDB.RetrieveUploadsByCLM(clientMatter)
133 return uploadList
134
135 def GetProductionData(self,caseName):
136 clientMatter = caseName.split("_(")[1]
137 clientMatter = clientMatter[:-1]
138 clientMatter = clientMatter.replace('-','.')
139 productionList = self.accessDB.RetrieveProductionsByCLM(clientMatter)
140 return productionList
141
142 def GetProductionTotal(self,productionList):
143 """Using the above productionList, this returns the total docs and pages produced"""
144 pgCountTotal = 0
145 docCountTotal = 0
146 for i in productionList:
147 pageCount = i[-2]
148 docCount = i[-3]
149 if 'None' in pageCount:
150 pass
151 else:
152 #print pageCount
153 pgCountTotal = pgCountTotal+int(pageCount)
154 if 'None' in pageCount:
155 pass
156 else:
157 #print docCount
158 docCountTotal = docCountTotal+int(docCount)
159 return pgCountTotal,docCountTotal
160
161 def ExportProductionDataToExcel(self,CaseName,pathToCSV):
162 """Exports the production data to a csv file"""
163 productionList = self.GetProductionData(CaseName)
164 #print productionList
165 outputFile = open(pathToCSV,'w')
166 outputFile.write('Production ID,Production Date,Start Bates,End Bates,Document Count,Page Count,Notes\n')
167 for i in productionList:
168 for x in i:
169 outputFile.write(x+",")
170 outputFile.write("\n")
171 outputFile.close()
172
173 def GetUploadTotal(self,uploadList):
174 """ Using the above uploadList, this will return the total uploaded """
175 count = 0.
176 for i in uploadList:
177 size = i[-1]
178
179 if 'None' in size:
180 pass
181 else:
182 rawSize = directorySize2.prettyToUnpretty_Filesize(size)
183 count = count + rawSize
184 prettySizeFinal = directorySize2.pretty_filesize2(count)
185 return prettySizeFinal
186
187 def MakeCaseDormant(self, caseAndCLM):
188 """Moves the case to the Dormant folder"""
189 print "Making %s case dormant..."
190 os.rename(os.path.join(self.casesDir,caseAndCLM),os.path.join(self.casesDir,os.path.join('zzzz_dormant_', caseAndCLM)))
191 print "Case has been archived."
192
193
194 def ViewCaseNotes(self,caseName,office):
195 """Trys to open the case notes file,in the case folder, for the active case, regardless who owns it."""
196 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
197 clientMatter = caseName.split("_(")[1]
198 clientMatter = clientMatter[:-1]
199 if "." in clientMatter:
200 clientMatter = clientMatter.replace('.','-')
201 folderMatrix = {}
202 #caseFolderLocation = os.path.join(caseFolderLocation,case)
203 err = False
204 if caseFolderLocation:
205 if os.path.exists(caseFolderLocation):
206 for f in os.listdir(caseFolderLocation):
207 if "_(" in f:
208 folderClientMatter = f.split("_(")[1]
209 folderClientMatter = folderClientMatter[:-1]
210 folderMatrix[folderClientMatter] = f
211 try:
212 folderName = folderMatrix[clientMatter]
213 os.startfile(os.path.join(caseFolderLocation, folderName)+"/Gen_Notes.txt")
214 except:
215 err = True
216 else:
217 err = True
218 else:
219 print "A case folder for this case was not found."
220 err = True
221 return err
222
223 def ViewProdSpec(self,caseName,office):
224 """Trys to open the prod spec file,in the case folder, for the active case, regardless who owns it."""
225 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
226 clientMatter = caseName.split("_(")[1]
227 clientMatter = clientMatter[:-1]
228 if "." in clientMatter:
229 clientMatter = clientMatter.replace('.','-')
230 folderMatrix = {}
231 #caseFolderLocation = os.path.join(caseFolderLocation,case)
232 err = False
233 if caseFolderLocation:
234 if os.path.exists(caseFolderLocation):
235 for f in os.listdir(caseFolderLocation):
236 if "_(" in f:
237 folderClientMatter = f.split("_(")[1]
238 folderClientMatter = folderClientMatter[:-1]
239 folderMatrix[folderClientMatter] = f
240 try:
241 folderName = folderMatrix[clientMatter]
242 os.startfile(os.path.join(caseFolderLocation, folderName+"/Production_Spec.txt"))
243 except:
244 err = True
245 else:
246 err = True
247 else:
248 print "A case folder for this case was not found."
249 err = True
250 return err
251
252 def OpenAlternateMediaFolder(self,caseName,office):
253 """Trys to open the Alternate media folder, for the active case, regardless who owns it."""
254 clientMatter = caseName.split("_(")[1]
255 clientMatter = clientMatter[:-1]
256 clientMatter = clientMatter.replace('-','.')
257 altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
258 err = False
259 if altMediaPath:
260 if os.path.exists(altMediaPath):
261 os.startfile(altMediaPath)
262 else:
263 print "An alternate media folder for this case was not found."
264 err = True
265 else:
266 err = True
267 return err
268
269 def SetAlternateMediaFolder(self,caseName,altMediaPath):
270 """Sets the alternate Media Path"""
271 clientMatter = caseName.split("_(")[1]
272 clientMatter = clientMatter[:-1]
273 clientMatter = clientMatter.replace('-','.')
274 self.accessDB.UpdateAlternateMediaPath(clientMatter,altMediaPath)
275
276 def GetVendorFolders(self,caseName):
277 """Returns the current list of vendor folders"""
278 clientMatter = caseName.split("_(")[1]
279 clientMatter = clientMatter[:-1]
280 clientMatter = clientMatter.replace('-','.')
281 vendorFolders = self.accessDB.GetVendorFolderPath(clientMatter)
282 print "V%s "%vendorFolders
283 return vendorFolders
284
285 def GetCasePathsData(self,caseName, office):
286 clientMatter = caseName.split("_(")[1]
287 clientMatter = clientMatter[:-1]
288 clientMatter = clientMatter.replace('-','.')
289 altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
290 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
291 caseFolderLocation = os.path.join(caseFolderLocation,caseName)
292 return altMediaPath, caseFolderLocation
293
294 def OpenCaseFolder(self,caseName,office):
295 """Trys to open the case folder for the active case, regardless who owns it."""
296 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
297 clientMatter = caseName.split("_(")[1]
298 clientMatter = clientMatter[:-1]
299 if "." in clientMatter:
300 clientMatter = clientMatter.replace('.','-')
301 folderMatrix = {}
302 #caseFolderLocation = os.path.join(caseFolderLocation,case)
303 err = False
304 if caseFolderLocation:
305 if os.path.exists(caseFolderLocation):
306 for f in os.listdir(caseFolderLocation):
307 if "_(" in f:
308 folderClientMatter = f.split("_(")[1]
309 folderClientMatter = folderClientMatter[:-1]
310 folderMatrix[folderClientMatter] = f
311 try:
312 folderName = folderMatrix[clientMatter]
313 os.startfile(os.path.join(caseFolderLocation, folderName))
314 except:
315 err = True
316 else:
317 err = True
318 else:
319 print "A case folder for this case was not found."
320 err = True
321 return err
322
323
324 def SetCaseNameAndCLM(self, newCaseName, newClientMatterNumber):
325 """Used when setting up a new case. Should have both or nothing"""
326 self.caseName = newCaseName
327 self.clientMatter = newClientMatterNumber
328 #print self.clientMatter
329
330 def SetChargableCase(self, chargBool):
331 """sets or clears the chargable case settings"""
332 pass
333 def SetResponsibleVendor(self, vendorInfo):
334 """Sets the vendor name that is responsible for the case"""
335 pass
336 def SetReviewPlatform(self, reviewPlatform):
337 """Sets the review platform chosen for this case"""
338 if reviewPlatform == "Concordance":
339 print "Concordance selected. Creating DIS directories..."
340 hDrivePath = ConcordanceHelperTools.ParseClientMatter(self.clientMatter)
341 os.mkdir(hDrivePath)
342 print "Matter folder created."
343 os.mkdir(os.path.join(hDrivePath,'Match'))
344 os.mkdir(os.path.join(hDrivePath,'Tag_Databases'))
345 print "Supplemental folders created."
346 print "DIS directories done!"
347
348
349
350 def SyncWithAccessDB(self,case = 'ALL'):
351 """Syncs your cases with the access database. This might only get run once when you first install
352 the program though..."""
353 ## So this syncs 'your' databases only. even though you are looking at a list of eeryone's databases
354 ## it will only sync yours. even if you did an upload for another tpm, that wouldnt get synced unles
355 ## the owner did a sync all. for 2 way sync to work, you should check, in access, that they have the case name
356 ## (with no funky characters) populated, before they run this for the first time.
357 if case == 'ALL':
358 ## verify that all your cases are up there, if not add it. but have support for cases where is should be
359 ## yours but is assigned to someone else...
360 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
361 myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
362 myLocalClientMatterList = []
363
364 ## Sync cases from my local to access
365 for case in self.responsibleCasesList:
366 localCaseName,clientMatter = case.split("_(")
367 clientMatter = clientMatter.replace(")","")
368 clientMatter = clientMatter.replace("-",".")
369 myLocalClientMatterList.append(clientMatter)
370 for clm in myLocalClientMatterList:
371 if clm in myAccessClientMatterList:
372 print "%s exists"% clm
373 elif clm in fullClientMatterList:
374 print "%s cant be added to your cases because it's owned by someone else..."% clm
375 else:
376 print "%s does not exist in the database. Adding it..."% clm
377 self.AddCaseToAccessDB(localCaseName,clientMatter)
378
379 ## Sync cases from Access to my local
380
381
382 uploadReportMatrix = {}
383 for caseName in self.responsibleCasesList:
384 print "now processing %s"% caseName
385 casePath = os.path.join(self.casesDir,caseName)
386 if os.path.exists(os.path.join(casePath,"UploadReport.txt")):
387 print "yup"
388 caseUploadContents = open(os.path.join(casePath,"UploadReport.txt")).readlines()
389 clientMatter = caseName.split("_(")[1]
390 clientMatter = clientMatter.replace(")","")
391 clientMatter = clientMatter.replace("-",".")
392 for i in caseUploadContents:
393 i = i.replace("\n","")
394 i = i.replace(" | ","|")
395 try:
396 uploadReportMatrix[clientMatter].append(("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3]))
397 except:
398 uploadReportMatrix[clientMatter] = [("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3])]
399 #print uploadReportMatrix
400
401 accessMyCaseUploads = self.accessDB.RetrieveMyCaseUploads('09756')
402 for x in uploadReportMatrix.keys():
403 localCaseUploadList = uploadReportMatrix[x]
404 tempMatrix = {}
405 try:
406 accessCaseUploadList = accessMyCaseUploads[x]
407 #print accessCaseUploadList
408 for y in localCaseUploadList:
409 epoch = y[0]
410 if int(epoch) > 1298462400:
411 #print epoch
412 reviewPlatform = y[1]
413 reportSize = y[3]
414 #print "."
415 #print accessCaseUploadList
416 if epoch in accessCaseUploadList:
417 print "%s, in the %s case, is already in there, skipping."%(y,x)
418 else:
419 print "%s, in the %s case, is missing. Will be added..."%(y,x)
420 date = y[2]
421 date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
422
423 self.accessDB.UpdateCaseUpload(x,reviewPlatform,{epoch:(date,reportSize)})
424 #tempMatrix[epoch] = [platform,(date,size)]
425 else:
426 #print "This entry is pre cutover"
427 pass
428 except KeyError:
429 print "nothing for this one"
430 for z in localCaseUploadList:
431 print "%s, in the %s case, is missing. Will be added..."%(z,x)
432 date = z[0]
433 date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
434 #try:
435 # tempMatrix[date].append(z[1])
436 #except:
437 # tempMatrix[date] = [z[1]]
438 #print tempMatrix
439 #if tempMatrix:
440 # #print tempMatrix
441 # self.accessDB.UpdateCaseUpload(x,'Concordance DIS', tempMatrix)
442 #pass
443
444
445 #print myLocalClientMatterList
446 ## verify that all of your uploads are up there, if not, add it.
447 self.accessDB.CloseAccessConnection()
448
449 else:
450 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
451 myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
452
453