ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/MCP_Console.py
Revision: 468
Committed: Wed Oct 9 20:06:33 2013 UTC (12 years, 5 months ago) by nino.borges
Content type: text/x-python
File size: 36898 byte(s)
Log Message:
On edit 343 I accidently messed up AddCaseToAccessDB as a typo. This fixes that.

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.fullTPMMatrix = self.accessDB.RetrieveAllTPMMatrix()
27 self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo()
28 #responsibleCases,casesDir = MCP_Lib.GetCaseList('',self.accessDB)
29 myCases, myActiveCases,officeCases, allCases,casesDir, casePathStyleMatrix= MCP_Lib.GetCaseList('',self.accessDB)
30
31 ## Testing version
32 #self.accessDB = MCP_Lib.AccessDBConnection(r"W:\Manny\testing\TPM_CaseTracking.mdb")
33 #responsibleCases,casesDir = MCP_Lib.GetCaseList(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP",self.accessDB)
34 #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")
35
36 print "connected to DB."
37
38 self.responsibleCasesList = myCases
39 self.casesDir = casesDir
40
41
42 def AddNewCase(self, caseName, clientMatter, chargable = False, reviewPlatform = "", responsibleProcessingVendor = "",
43 responsibleScanningVendor = "",responsibleHostingVendor = ""):
44 ## TODO: add a verification somehwere where it verify that the proposed name does not include characters that cant be used in a folder name.
45 ## Add the local folders The GUI should test that the clm is 10 digits and has hyphen.
46 template = os.path.join(self.casesDir,'_Template_')
47 new = os.path.join(self.casesDir, caseName + '_(%s)'%clientMatter)
48 if os.path.exists(new):
49 print "ERROR: This case already exists!!"
50 else:
51 #print template
52 #print new
53 os.mkdir(new)
54 for file in os.listdir(template):
55 shutil.copy2(os.path.join(template,file),new)
56 ## Check the H drive for the supplemental folders and the matter folder, only if they select Concordance.
57 self.SetCaseNameAndCLM(caseName,clientMatter)
58 #print "DEBUG: %s"% caseName
59 #print "DEBUG: %s"% clientMatter
60 self.AddCaseToAccessDB(caseName,clientMatter)
61
62 def ChangeCaseName(self,caseName,newCaseName,newClientMatter):
63 """This method will allow for editing the case name and number. This is different than settign the casename"""
64 ## Test that there is only one entry for this clm in access.
65 clientMatter = caseName.split("_(")[1]
66 clientMatter = clientMatter[:-1]
67 clientMatter = clientMatter.replace('-','.')
68 accessCaseName = self.accessDB.GetCaseName(clientMatter)
69 localCasesPath = self.casesDir
70 if os.path.exists(os.path.join(localCasesPath,caseName)):
71 if clientMatter != newClientMatter:
72 if newCaseName != caseName.split("_("):
73 ## change both
74 self.accessDB.UpdateCaseName(clientMatter,newCaseName)
75 self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
76 os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%newClientMatter.replace(".","-")))
77 else:
78 ## change just client matter
79 self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
80 os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,caseName + '_(%s)'%newClientMatter.replace(".","-")))
81 elif newCaseName != caseName.split("_("):
82 ## change just the casename
83 self.accessDB.UpdateCaseName(clientMatter,newCaseName)
84 os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%clientMatter.replace(".","-")))
85
86 ## verify that the proposed name does not include characters that cant be used in a folder name.
87 ## Change the name and or clm in access
88
89 ## Test that it was changed in access
90 ## change the folder name in cases.
91 else:
92 ## That case dir cant be found. They can't change other's casenames.
93 err = 1
94
95
96 def AddCaseToAccessDB(self, clientMatter):
97 ## First test to see if it's already in the DB.
98 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
99 clientMatter = clientMatter.replace("-",".")
100 if clientMatter in fullClientMatterList:
101 print "This client matter already exists in the database. Skipping."
102 else:
103 print "New client matter. Adding."
104 self.accessDB.AddNewCase(caseName, clientMatter, self.tPMName,self.tPMID,responsibleOffice = self.tPMOffice)
105 print "Added!"
106
107 def EditCaseData(self,caseName,chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice, caseStatus, casePathStyle):
108 clientMatter = caseName.split("_(")[1]
109 clientMatter = clientMatter[:-1]
110 clientMatter = clientMatter.replace('-','.')
111 empID = self.fullTPMMatrix[respTPM][0]
112 self.accessDB.UpdateChargable(clientMatter,chargeableBool)
113 self.accessDB.UpdateResponsibleAttorney(clientMatter,respAttorney)
114 self.accessDB.UpdateResponsibleParalegal(clientMatter,respParalegal)
115 self.accessDB.UpdateReviewPlatform(clientMatter,revPlatform)
116 self.accessDB.UpdateResponsibleTPM(clientMatter,respTPM,empID)
117 self.accessDB.UpdatePrimaryOffice(clientMatter,respOffice)
118 self.accessDB.UpdateResponsibleVendors(clientMatter,respVendorTpl)
119 self.accessDB.UpdateCaseStatus(clientMatter, caseStatus)
120 self.accessDB.UpdateCasePathStyle(clientMatter,casePathStyle)
121 def GetCaseData(self, caseName):
122 #use this to get the data on the selected case, to populate your GUI
123 clientMatter = caseName.split("_(")[1]
124 clientMatter = clientMatter[:-1]
125 clientMatter = clientMatter.replace('-','.')
126 chargeableBool = self.accessDB.GetChargable(clientMatter)
127 respAttorney = self.accessDB.GetResponsibleAttorney(clientMatter)
128 respParalegal = self.accessDB.GetResponsibleParalegal(clientMatter)
129 respVendorTpl = self.accessDB.GetResponsibleVendorTpl(clientMatter)
130 revPlatform = self.accessDB.GetReviewPlatform(clientMatter)
131 respTPM = self.accessDB.GetResponsibleTPM(clientMatter)
132 respOffice = self.accessDB.GetPrimaryOffice(clientMatter)
133 caseStatus = self.accessDB.GetCaseStatus(clientMatter)
134 uploadCost = self.accessDB.GetUploadCostRate(clientMatter)
135 storageCost = self.accessDB.GetStorageCostRate(clientMatter)
136 disclosureLetterBool,disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
137 casePathStyle = self.accessDB.GetCasePathStyle(clientMatter)
138 return (chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice,caseStatus,uploadCost,storageCost,disclosureLetterBool,casePathStyle)
139
140 def GetPossibleProducedToEntities(self,caseName):
141 """Returns the possible produced to entities for a case"""
142 clientMatter = caseName.split("_(")[1]
143 clientMatter = clientMatter[:-1]
144 clientMatter = clientMatter.replace('-','.')
145 possibleProducedToEntities = self.accessDB.GetProducedToEntities(clientMatter)
146 return possibleProducedToEntities
147
148 def GetPossibleProdReqByNames(self,caseName):
149 """Returns the possible requested by names for a case"""
150 clientMatter = caseName.split("_(")[1]
151 clientMatter = clientMatter[:-1]
152 clientMatter = clientMatter.replace('-','.')
153 possibleProdReqByNames = self.accessDB.GetProductionRequestedByNames(clientMatter)
154 return possibleProdReqByNames
155
156
157 def AddProductionEntry(self, CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword):
158 """This method adds one production entry to the case."""
159 errRpt = True
160 if CLM:
161 if prodID:
162 if prodProcessedDate:
163 if begBates:
164 if endBates:
165 if prodDocCount:
166 if prodPageCount:
167 if prodNotes:
168 self.accessDB.UpdateProductionDetail(CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword)
169 errRpt = False
170 return errRpt
171
172 def AddDataUpload(self,CLM, reviewPlatform, reportSize):
173 """This method will add one case upload."""
174 ## TODO: one day change it so that copy up requst calls this instead
175 ## of it being internal to that prog.
176 epoch = str(int(time.time()))
177 self.accessDB.UpdateCaseUpload(CLM,reviewPlatform,{epoch:(time.strftime('%m/%d/%Y'),reportSize)})
178
179 def RemoveDataUpload(self,CLM,UEPOCH):
180 """This method calls DeleteCaseUpload and removes just one case upload. """
181 err = self.accessDB.DeleteCaseUpload(CLM,UEPOCH)
182 if err:
183 print "ERROR: An Error occured and this value was not removed!"
184 else:
185 print "%s Removed"% UEPOCH
186
187 def GetUploadData(self, caseName):
188 # Used to get upload data, on the selected case, to populate the upload dialog
189 clientMatter = caseName.split("_(")[1]
190 clientMatter = clientMatter[:-1]
191 clientMatter = clientMatter.replace('-','.')
192 uploadList = self.accessDB.RetrieveUploadsByCLM(clientMatter)
193 return uploadList
194
195 def GetProductionData(self,caseName):
196 clientMatter = caseName.split("_(")[1]
197 clientMatter = clientMatter[:-1]
198 clientMatter = clientMatter.replace('-','.')
199 productionMatrix = self.accessDB.RetrieveProductionsByCLM(clientMatter)
200 return productionMatrix
201
202 def GetProductionTotal(self,productionList):
203 """Using the above productionList, this returns the total docs and pages produced"""
204 pgCountTotal = 0
205 docCountTotal = 0
206 for i in productionList:
207 pageCount = i[-7]
208 docCount = i[-8]
209 if 'None' in pageCount:
210 pass
211 else:
212 #print pageCount
213 pgCountTotal = pgCountTotal+int(pageCount)
214 if 'None' in pageCount:
215 pass
216 else:
217 #print docCount
218 docCountTotal = docCountTotal+int(docCount)
219 return pgCountTotal,docCountTotal
220
221 def ExportProductionDataToExcel(self,CaseName,pathToCSV):
222 """Exports the production data to a csv file"""
223 productionList = self.GetProductionData(CaseName)
224 #print productionList
225 outputFile = open(pathToCSV,'w')
226 outputFile.write('Production ID,Production Completed Date,Production Sent Date,Start Bates,End Bates,Document Count,Page Count,Produced To,Requested By,Production Media,ProductionMediaPassword,Production Sources,Notes\n')
227 for i in productionList:
228 for x in i:
229 outputFile.write(x+",")
230 outputFile.write("\n")
231 outputFile.close()
232
233 def GetUploadTotal(self,uploadList):
234 """ Using the above uploadList, this will return the total uploaded """
235 count = 0.
236 for i in uploadList:
237 size = i[-1]
238
239 if 'None' in size:
240 pass
241 else:
242 rawSize = directorySize2.prettyToUnpretty_Filesize(size)
243 count = count + rawSize
244 prettySizeFinal = directorySize2.pretty_filesize2(count)
245 return prettySizeFinal
246
247
248 def TransferCase(self, caseName, sourceTpm, targetTpm):
249 """Transfers case to another TPM"""
250 sourceTPMOffice = self.fullTPMMatrix[sourceTpm][1]
251 targetTPMOffice = self.fullTPMMatrix[targetTpm][1]
252 ## Confirm that folder exists
253 print "Confirming folder exists..."
254 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(sourceTPMOffice)
255 targetCaseFolderLocation = MCP_Lib.GetOtherCaseFolder(targetTPMOffice)
256
257 clientMatter = caseName.split("_(")[1]
258 clientMatter = clientMatter[:-1]
259 if "." in clientMatter:
260 clientMatter = clientMatter.replace('.','-')
261 folderMatrix = {}
262 #caseFolderLocation = os.path.join(caseFolderLocation,case)
263 err = False
264 if caseFolderLocation:
265 if os.path.exists(caseFolderLocation):
266 for f in os.listdir(caseFolderLocation):
267 if "_(" in f:
268 folderClientMatter = f.split("_(")[1]
269 folderClientMatter = folderClientMatter[:-1]
270 folderMatrix[folderClientMatter] = f
271 try:
272 folderName = folderMatrix[clientMatter]
273 fullCasePath = os.path.join(caseFolderLocation, folderName)
274 except:
275 err = True
276 else:
277 err = True
278 else:
279 print "A case folder for this case was not found."
280 err = True
281 if err:
282 print "Transfer aborted"
283 else:
284 if os.path.exists(fullCasePath):
285 print "Folder exists."
286 ## Check that target folder does not exist, support same office transfer.
287 print "Testing target directory..."
288 fullTargetCasePath = os.path.join(targetCaseFolderLocation, folderName)
289 if sourceTPMOffice == targetTPMOffice:
290 ## This is an inter office transfer, which is okay but dont move folders
291 pass
292 else:
293 if os.path.exists(fullTargetCasePath):
294 err = True
295 print "This case folder already exists."
296 else:
297 ## First move the folder to the new location
298 try:
299 print "moving %s to %s"%(fullCasePath,fullTargetCasePath)
300 shutil.move(fullCasePath,fullTargetCasePath)
301 except:
302 err = True
303 print "The move failed!"
304 if os.path.exists(fullTargetCasePath):
305 print "Case folder moved."
306 if err:
307 print "Transfer aborted"
308 else:
309 ## Change the info in Access
310 #print targetTPMOffice
311 self.accessDB.UpdatePrimaryOffice(clientMatter.replace('-','.'),targetTPMOffice)
312 self.accessDB.UpdateResponsibleTPM(clientMatter.replace('-','.'),targetTpm,self.fullTPMMatrix[targetTpm][0])
313 print "Case Transfer Completed."
314 return err
315
316 def MakeCaseDormant(self, caseAndCLM):
317 """Moves the case to the Dormant folder"""
318 ## Dont do this, just hide from your view. Once archived, move off share.
319 print "Making %s case dormant..."
320 os.rename(os.path.join(self.casesDir,caseAndCLM),os.path.join(self.casesDir,os.path.join('zzzz_dormant_', caseAndCLM)))
321 print "Case has been archived."
322
323
324 def ViewCaseNotes(self,caseName,office):
325 """Trys to open the case notes file,in the case folder, for the active case, regardless who owns it."""
326 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
327 clientMatter = caseName.split("_(")[1]
328 clientMatter = clientMatter[:-1]
329 if "." in clientMatter:
330 clientMatter = clientMatter.replace('.','-')
331 folderMatrix = {}
332 #caseFolderLocation = os.path.join(caseFolderLocation,case)
333 err = False
334 if caseFolderLocation:
335 if os.path.exists(caseFolderLocation):
336 for f in os.listdir(caseFolderLocation):
337 if "_(" in f:
338 folderClientMatter = f.split("_(")[1]
339 folderClientMatter = folderClientMatter[:-1]
340 folderMatrix[folderClientMatter] = f
341 try:
342 folderName = folderMatrix[clientMatter]
343 os.startfile(os.path.join(caseFolderLocation, folderName)+"/Gen_Notes.txt")
344 except:
345 err = True
346 else:
347 err = True
348 else:
349 print "A case folder for this case was not found."
350 err = True
351 return err
352
353 def ViewProdSpec(self,caseName,office):
354 """Trys to open the prod spec file,in the case folder, for the active case, regardless who owns it."""
355 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
356 clientMatter = caseName.split("_(")[1]
357 clientMatter = clientMatter[:-1]
358 if "." in clientMatter:
359 clientMatter = clientMatter.replace('.','-')
360 folderMatrix = {}
361 #caseFolderLocation = os.path.join(caseFolderLocation,case)
362 err = False
363 if caseFolderLocation:
364 if os.path.exists(caseFolderLocation):
365 for f in os.listdir(caseFolderLocation):
366 if "_(" in f:
367 folderClientMatter = f.split("_(")[1]
368 folderClientMatter = folderClientMatter[:-1]
369 folderMatrix[folderClientMatter] = f
370 try:
371 folderName = folderMatrix[clientMatter]
372 os.startfile(os.path.join(caseFolderLocation, folderName+"/Production_Spec.txt"))
373 except:
374 err = True
375 else:
376 err = True
377 else:
378 print "A case folder for this case was not found."
379 err = True
380 return err
381
382 #def CreateCasePathStyleFolders(self,platform,clientMatter):
383 # """This method will create the "new style" case folder paths for a case on IDS"""
384 # ## make sure that the CLMFolderPath exists, else make the folders needed to make it exist.
385 # CLMFolderPath = ConcordanceHelperTools.ParseClientMatterRemote(clientMatter)
386 #
387 # expeObj = MCP_Lib.ExpeDatConnection(platform)
388 #
389 # ## Test each folder, and subfolder, on the new style spec to see if they are there, if not create them.
390 # newStyleFolderPathList = [
391 # "Productions\\MWE_Client\\Backloads",
392 # "Productions\\MWE_Client\\Exports",
393 # "Productions\\Other_Party",
394 # "Review_Docs\\Hard_Copy",
395 # "Review_Docs\\Loose",
396 # "Review_Docs\\Processed_Data",
397 # "Review_Docs\\TIFs",
398 # "Working"
399 # ]
400 # for pathPart in newStyleFolderPathList:
401 # newLocation = os.path.join(CLMFolderPath,pathPart)
402 # pathExists = expeObj.TestPath(newLocation)
403 # tempPath = newLocation
404 # pathRemainingList = []
405 # while pathExists == False:
406 # tempPath, tempPart = os.path.split(tempPath)
407 # pathRemainingList.append(tempPart)
408 # pathExists = expeObj.TestPath(tempPath)
409 # if pathRemainingList:
410 # pathRemainingList.reverse()
411 # #print pathRemainingList
412 # for pathPiece in pathRemainingList:
413 # tempPath = os.path.join(tempPath,pathPiece)
414 # expeObj.CreateNewPath(tempPath)
415 # print "DEBUG: testing password file"
416 # pathExists = expeObj.TestPath(os.path.join(CLMFolderPath,"Productions\\MWE_Client\\Exports\\_passwords.txt"))
417 # if pathExists:
418 # print "DEBUG: file already exists"
419 # else:
420 # pw_file = open(os.path.join(os.getenv('TEMP'),"_passwords.txt"),'w')
421 # pw_file.close()
422 # expeObj.CopyToLN(os.path.join(os.getenv('TEMP'),"_passwords.txt",),os.path.join(CLMFolderPath,"Productions\\MWE_Client\\Exports"))
423 #
424
425 def CreateProductionReport(self,caseName,office):
426 """Creates a html production report in the altMediaPath folder"""
427 err = False
428 clientMatter = caseName.split("_(")[1]
429 clientMatter = clientMatter[:-1]
430 clientMatter = clientMatter.replace('-','.')
431 altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
432 productionMatrix = self.GetProductionData(caseName)
433 if os.path.exists(os.path.join(altMediaPath,'__MCP_Data')):
434 pass
435 else:
436 os.mkdir(os.path.join(altMediaPath,'__MCP_Data'))
437 reportFile = open(os.path.join(os.path.join(altMediaPath,'__MCP_Data'),'MCP_Production_Report.html'),'w')
438 reportFile.write('''<html>\n<head>\n <title>MCP: %s Production Report</title>\n <style type="text/css" media="screen">\n\n'''%caseName)
439 reportFile.write(r'''div#Rsidebar {
440 float: right;
441 width: 20%;
442 }
443 div#Lsidebar {
444 float: left;
445 width:20%;
446 height:380px;
447 }
448
449 </style>''')
450 reportFile.write('''
451 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
452 <meta name="author" content="Emanuel Borges">
453 </head>
454 <body>
455
456 <h3><br>
457 </h3>
458 <center><h2>%s Production Report</h2></center>'''%caseName)
459 reportFile.write(r'''<center><hr width="40%"></center>''')
460 for k in productionMatrix.keys():
461 productionList = productionMatrix[k]
462 reportFile.write("<h4>%s Productions</h3>" % k)
463 reportFile.write('''<center><table border=1 cellspacing=0 cellpadding=5 width=1800>\n<tr><th>Production ID</th><th>Processed Date</th><th>Sent Date</th><th>Start Bates</th><th>End Bates</th><th>Document Count</th><th>Page Count</th><th>Requested By</th><th>Production Media</th><th>Media Password</th><th>Production Sources</th><th>Notes</th></tr>''')
464 for i in productionList:
465 reportFile.write("<tr>")
466 count = 1
467 for x in i:
468 if count == 8:
469 count = count + 1
470 else:
471 reportFile.write("<td>%s</td>"%x)
472 count = count +1
473 reportFile.write("</tr>")
474
475 reportFile.write('</table></center>\n\n')
476 reportFile.write('''<div id="footer">
477 <p><span>&copy; 2012 <a href="#">Emanuel Borges</a></span><br />
478 Website automatically generated by the MCP program.</p></div>''')
479 reportFile.write('</body></html>\n')
480 reportFile.close()
481 return err
482
483 def OpenAlternateMediaFolder(self,caseName,office,testOnly=False):
484 """Trys to open the Alternate media folder, for the active case, regardless who owns it.
485 If testOnly is set to True, it will only test that it exists and not open the folder."""
486 clientMatter = caseName.split("_(")[1]
487 clientMatter = clientMatter[:-1]
488 clientMatter = clientMatter.replace('-','.')
489 altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
490 err = False
491 if altMediaPath:
492 if os.path.exists(altMediaPath):
493 if testOnly:
494 pass
495 else:
496 os.startfile(altMediaPath)
497 else:
498 print "An alternate media folder for this case was not found."
499 err = True
500 else:
501 err = True
502 return err
503
504 def SetAlternateMediaFolder(self,caseName,altMediaPath):
505 """Sets the alternate Media Path"""
506 clientMatter = caseName.split("_(")[1]
507 clientMatter = clientMatter[:-1]
508 clientMatter = clientMatter.replace('-','.')
509 self.accessDB.UpdateAlternateMediaPath(clientMatter,altMediaPath)
510
511 def GetVendorFolders(self,caseName):
512 """Returns the current list of vendor folders, for one case"""
513 clientMatter = caseName.split("_(")[1]
514 clientMatter = clientMatter[:-1]
515 clientMatter = clientMatter.replace('-','.')
516 vendorFolders = self.accessDB.GetVendorFolderPath(clientMatter)
517 #print "V%s "%vendorFolders
518 return vendorFolders
519
520 def SetVendorFolders(self,caseName, vendorFolders):
521 """Sets the Vendor Folder"""
522 clientMatter = caseName.split("_(")[1]
523 clientMatter = clientMatter[:-1]
524 clientMatter = clientMatter.replace('-','.')
525 self.accessDB.UpdateVendorFolderPath(clientMatter,vendorFolders)
526
527 def GetVendorFoldersList(self):
528 """Returns a list of all vendorFolders"""
529 ## Change this so that it actually grabs the current ones from ln. Dont know if I should grab from a table in access.
530 vendorFolderList = ["None"]
531 for n in range(1,61):
532 vendorFolderList.append("mwevendor%0*d"%(2,n))
533 return vendorFolderList
534
535 def GetDisclosureLetterData(self,caseName):
536 """Returns the the bool of if a case has a disclosure letter and if so the path."""
537 clientMatter = caseName.split("_(")[1]
538 clientMatter = clientMatter[:-1]
539 clientMatter = clientMatter.replace('-','.')
540 disclosureLetterSet, disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
541 return disclosureLetterSet, disclosureLetterPath
542
543 def SetDisclosureLetterData(self,caseName,disclosureLetterPath):
544 """Sets the disclosure letter path and checks it as true in the database"""
545 clientMatter = caseName.split("_(")[1]
546 clientMatter = clientMatter[:-1]
547 clientMatter = clientMatter.replace('-','.')
548 self.accessDB.UpdateDisclosureLetter(clientMatter,True,disclosureLetterPath)
549
550 def GetCasePathsData(self,caseName, office):
551 clientMatter = caseName.split("_(")[1]
552 clientMatter = clientMatter[:-1]
553 clientMatter = clientMatter.replace('-','.')
554 altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
555 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
556 caseFolderLocation = os.path.join(caseFolderLocation,caseName)
557 return altMediaPath, caseFolderLocation
558
559 def SetUploadAndStorageCosts(self, caseName,uploadCost,storageCost):
560 clientMatter = caseName.split("_(")[1]
561 clientMatter = clientMatter[:-1]
562 clientMatter = clientMatter.replace('-','.')
563 if uploadCost:
564 self.accessDB.UpdateUploadCostRate(clientMatter,uploadCost)
565 if storageCost:
566 self.accessDB.UpdateStorageCostRate(clientMatter,storageCost)
567
568 def OpenCaseFolder(self,caseName,office):
569 """Trys to open the case folder for the active case, regardless who owns it."""
570 caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
571 clientMatter = caseName.split("_(")[1]
572 clientMatter = clientMatter[:-1]
573 if "." in clientMatter:
574 clientMatter = clientMatter.replace('.','-')
575 folderMatrix = {}
576 #caseFolderLocation = os.path.join(caseFolderLocation,case)
577 err = False
578 if caseFolderLocation:
579 if os.path.exists(caseFolderLocation):
580 for f in os.listdir(caseFolderLocation):
581 if "_(" in f:
582 folderClientMatter = f.split("_(")[1]
583 folderClientMatter = folderClientMatter[:-1]
584 folderMatrix[folderClientMatter] = f
585 try:
586 folderName = folderMatrix[clientMatter]
587 os.startfile(os.path.join(caseFolderLocation, folderName))
588 except:
589 err = True
590 else:
591 err = True
592 else:
593 print "A case folder for this case was not found."
594 err = True
595 return err
596
597
598 def SetCaseNameAndCLM(self, newCaseName, newClientMatterNumber):
599 """Used when setting up a new case. Should have both or nothing"""
600 self.caseName = newCaseName
601 self.clientMatter = newClientMatterNumber
602 #print self.clientMatter
603
604 def SetChargableCase(self, chargBool):
605 """sets or clears the chargable case settings"""
606 pass
607 def SetResponsibleVendor(self, vendorInfo):
608 """Sets the vendor name that is responsible for the case"""
609 pass
610 def SetReviewPlatform(self, reviewPlatform):
611 """Sets the review platform chosen for this case"""
612 if reviewPlatform == "Concordance":
613 print "Concordance selected. Creating DIS directories..."
614 hDrivePath = ConcordanceHelperTools.ParseClientMatter(self.clientMatter)
615 os.mkdir(hDrivePath)
616 print "Matter folder created."
617 os.mkdir(os.path.join(hDrivePath,'Match'))
618 os.mkdir(os.path.join(hDrivePath,'Tag_Databases'))
619 print "Supplemental folders created."
620 print "DIS directories done!"
621
622 def GetDatabaseList(self,caseName):
623 """Returns the list of databases in the database list file."""
624 return ['datbase1','database2','database3']
625
626 def SyncWithAccessDB(self,case = 'ALL'):
627 """Syncs your cases with the access database. This might only get run once when you first install
628 the program though..."""
629 ## So this syncs 'your' databases only. even though you are looking at a list of eeryone's databases
630 ## it will only sync yours. even if you did an upload for another tpm, that wouldnt get synced unles
631 ## the owner did a sync all. for 2 way sync to work, you should check, in access, that they have the case name
632 ## (with no funky characters) populated, before they run this for the first time.
633 if case == 'ALL':
634 ## verify that all your cases are up there, if not add it. but have support for cases where is should be
635 ## yours but is assigned to someone else...
636 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
637 myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
638 myLocalClientMatterList = []
639
640 ## Sync cases from my local to access
641 for case in self.responsibleCasesList:
642 localCaseName,clientMatter = case.split("_(")
643 clientMatter = clientMatter.replace(")","")
644 clientMatter = clientMatter.replace("-",".")
645 myLocalClientMatterList.append(clientMatter)
646 for clm in myLocalClientMatterList:
647 if clm in myAccessClientMatterList:
648 print "%s exists"% clm
649 elif clm in fullClientMatterList:
650 print "%s cant be added to your cases because it's owned by someone else..."% clm
651 else:
652 print "%s does not exist in the database. Adding it..."% clm
653 self.AddCaseToAccessDB(localCaseName,clientMatter)
654
655 ## Sync cases from Access to my local
656
657
658 uploadReportMatrix = {}
659 for caseName in self.responsibleCasesList:
660 print "now processing %s"% caseName
661 casePath = os.path.join(self.casesDir,caseName)
662 if os.path.exists(os.path.join(casePath,"UploadReport.txt")):
663 print "yup"
664 caseUploadContents = open(os.path.join(casePath,"UploadReport.txt")).readlines()
665 clientMatter = caseName.split("_(")[1]
666 clientMatter = clientMatter.replace(")","")
667 clientMatter = clientMatter.replace("-",".")
668 for i in caseUploadContents:
669 i = i.replace("\n","")
670 i = i.replace(" | ","|")
671 try:
672 uploadReportMatrix[clientMatter].append(("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3]))
673 except:
674 uploadReportMatrix[clientMatter] = [("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3])]
675 #print uploadReportMatrix
676
677 accessMyCaseUploads = self.accessDB.RetrieveMyCaseUploads('09756')
678 for x in uploadReportMatrix.keys():
679 localCaseUploadList = uploadReportMatrix[x]
680 tempMatrix = {}
681 try:
682 accessCaseUploadList = accessMyCaseUploads[x]
683 #print accessCaseUploadList
684 for y in localCaseUploadList:
685 epoch = y[0]
686 if int(epoch) > 1298462400:
687 #print epoch
688 reviewPlatform = y[1]
689 reportSize = y[3]
690 #print "."
691 #print accessCaseUploadList
692 if epoch in accessCaseUploadList:
693 print "%s, in the %s case, is already in there, skipping."%(y,x)
694 else:
695 print "%s, in the %s case, is missing. Will be added..."%(y,x)
696 date = y[2]
697 date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
698
699 self.accessDB.UpdateCaseUpload(x,reviewPlatform,{epoch:(date,reportSize)})
700 #tempMatrix[epoch] = [platform,(date,size)]
701 else:
702 #print "This entry is pre cutover"
703 pass
704 except KeyError:
705 print "nothing for this one"
706 for z in localCaseUploadList:
707 print "%s, in the %s case, is missing. Will be added..."%(z,x)
708 date = z[0]
709 date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
710 #try:
711 # tempMatrix[date].append(z[1])
712 #except:
713 # tempMatrix[date] = [z[1]]
714 #print tempMatrix
715 #if tempMatrix:
716 # #print tempMatrix
717 # self.accessDB.UpdateCaseUpload(x,'Concordance DIS', tempMatrix)
718 #pass
719
720
721 #print myLocalClientMatterList
722 ## verify that all of your uploads are up there, if not, add it.
723 self.accessDB.CloseAccessConnection()
724
725 else:
726 fullClientMatterList = self.accessDB.RetrieveAllCaseList()
727 myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
728
729