ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/Trunk/MCP_Console.py
Revision: 459
Committed: Fri Sep 20 20:32:02 2013 UTC (12 years, 6 months ago) by nino.borges
Content type: text/x-python
Original Path: Python/NinoCode/Active_prgs/MCP/MCP_Console.py
File size: 34420 byte(s)
Log Message:
Added support for transffering cases between TPMs in other offices and intra office. Updated the main View Edit to support this. Now just need a busy dialog and a dialog for transfering through the menu option.

File Contents

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